* 강의를 듣고 복습하며 정리한 내용입니다.
Thread
lightweight process. 프로세스의 실행 단위라고도 할 수 있다. 같은 프로그램을 여러 개 실행했을 때 각각의 프로세스를 만드는 것은 비효율적이다. 스레드를 사용하면 프로세스 내의 주소 공간(코드, 데이터)이나 자원을 공유할 수 있다.
스레드 ID, 프로그램 카운터, 레지스트 집합, 스택으로 구성된다. 하나의 프로세스 내에서 스레드간 자원을 공유하고, 자원의 생성과 관리의 중복성을 최소화해서 수행 능력을 향상시키는 것을 멀티 스레드라고 한다.
응답 속도가 빠르고, 자원을 공유하기 때문에 경제적이고, 다중 CPU 구조에서 각각의 스레드를 병렬처리 할 수 있다는 장점이 있다. 단, 스레드 간 자원을 공유하기 때문에 값을 정확히 읽고 쓰기 위해서는 동기화 작업이 필요하다.
프로세스 생성
시스템이 부팅 된 후 첫 번째 프로세스는 운영체제가 생성하지만, 그다음부터는 이미 존재하는 프로세스가 다른 프로세스를 복제 생성한다. 이는 트리 구조를 형성한다.
프로세스 관련 시스템 콜
📌 fork()
새로운 프로세스를 생성하는 시스템 콜. 부모 프로세스와 주소 공간은 다르지만 내용은 그대로 복제한다. fork()의 리턴 값을 자식 프로세스는 0으로, 부모 프로세스는 자식의 process id로 해서 원본과 복제본을 구분한다.
📌 exec()
새로운 프로그램으로 자식 프로세스를 덮어쓰는 시스템 콜. 덮어쓰면 새로운 프로그램이 되기 때문에 명령어 아래 코드가 있어도 실행되지 않는다.
/*날짜와 시간(date)을 출력하는 자식 프로그램 예시*/
int main()
{ int pid;
pid = fork();
if (pid == 0) /*자식 프로세스인 경우*/
{ printf("\n Hello, I'm child. Now I'll run date\n");
execlp("/bin/date", "bin/date", (char *) 0);
}
else if (pid > 0) /*부모 프로세스인 경우*/
printf("\n Hello, I'm parent\n");
}
📌 wait()
프로세스는 부모 프로세스와 자식 프로세스가 독립적으로 CPU를 두고 경쟁하는 경우와 그렇지 않은 경우가 있다. wait 시스템 콜은 후자로, 커널은 자식 프로세스가 종료될 때까지 부모 프로세스를 blocked 상태로 만든다.
📌 exit()
프로세스를 종료시키는 시스템 콜.
1. 자발적 종료: 마지막 statement 수행 후 exit()을 통해 종료. 프로그램에 명시적으로 넣어주지 않아도 main함수가 return되는 위치에 컴파일러가 넣어준다.
2. 비자발적 종료
- 부모 프로세스가 자식 프로세스를 강제적으로 종료(자식 프로세스의 자원 요청이 한계치를 넘은 경우, 자식의 테스크가 더 이상 필요하지 않은 경우)하는 경우
- 사용자가 키보드로 kill, break 등 명령어를 친 경우
- 부모 프로세스가 종료되는 경우(자식 -> 부모 순으로 종료되어야 한다)
프로세스 간 협력
프로세스는 원칙적으로 독립적이고 다른 프로세스의 수행에 영향을 미칠 수 없다. 하지만 효율적인 실행을 위해 협력이 필요한 경우가 있다. 이때 IPC와 같은 협력 메커니즘을 사용한다.
IPC (Interprocess Communication)
하나의 컴퓨터 안에서 실행 중인 서로 다른 프로세스간에 발생하는 통신. 방법으로는 메시지를 전달하는 방법과 주소 공간을 공유하는 방법이 있다. 둘의 차이는 프로세스 사이에 공유 데이터를 사용하는가에 있다.
1. message passing: 커널을 통해 send()와 receive() 메시지를 전달한다. 프로세스의 이름을 명시해 전달하는 Direct communication, 프로세스의 이름을 명시하지 않고 mail box 또는 port를 사용하는 Indirect communication으로 나뉜다(2개의 프로세스에게만 링크를 할당하는 방식 등으로 구현 가능).
2. shared memory: 프로세스들이 주소 공간의 일부를 공유한다. 단, 데이터 일관성 문제가 발생하지 않도록 하기 위해 프로세스에서 동기화를 진행해야 한다.
'Computer Science > Operating system' 카테고리의 다른 글
[운영체제] CPU 스케줄링 | KOCW 2017 이화여대 반효경 교수님 (0) | 2022.05.31 |
---|---|
[운영체제] 프로세스 관리(1) | KOCW 2017 이화여대 반효경 교수님 (0) | 2022.05.25 |
[운영체제] 컴퓨터 시스템의 구조 | KOCW 2017 이화여대 반효경 교수님 (0) | 2022.05.24 |
[운영체제] 운영체제 개요 | KOCW 2017 이화여대 반효경 교수님 (0) | 2022.05.23 |