본문 바로가기

STUDY/운영체제

[2019.06.24] Thread

커널에 프로세스 생성을 요구할 때 일어나는 일
1. 새 process의 PCB data structure 생성
2. child process에게 PID 부여
3. PCB의 value 설정
4. linkages 설정 (가족들끼리 연결)
5. 다른 data structure 생성 또는 확장
6. user context 생성 (부모 PCB로 복사한 data, stack은 child용 공간을 만들어 사용한다.)
7. child process를 Ready 상태로 설정하고 Ready Queue에 삽입
8. parent process에게 child의 PID 반환하고 child에게 0줌.

Context switch (Process Switch)를 할 때,
1. 프로세스 종료
2. time slice 종료
3. Blocking System calls
4. I/O interrupt

Context switch 단계
1. program counter와 register를 포함한 process의 context 저장
2. Running 상태에 있는 process의 PCB update
3. PCB를 ready 또는 blocked 또는 ready/suspend queue로 이동
4. 그 다음 실행할 process 선택 (by scheduler)
5. 선택된 process의 PCB update (ready -> running)

프로세스가 죽을 때, exit() 함수 호출을 통해 죽는데 이 함수는 커널 모드에서 동작한다. parent process에게 signal을 보내고 parent process가 wait() 함수 호출을 통해 child의 PCB 정보를 넘겨받을 때까지 child의 PCB는 남아있다.

- Cooperating Process
    다른 process의 실행에 영향을 받을 수 있다. -> 분산 시스템
    Interprocess Communication (IPC) for the information sharing -> message passing, shared memory, remote procedure call
    message passing : process마다 message 공간이 있고 커널을 통해 message를 주고 가져온다. 하지만 커널에 가기 위해 system call을 실행하는데 mode change에 시간이 걸림.
    shared memory : 공유된 메모리에 process A가 메시지를 주면 process B는 그 메모리에서 읽어오는 형식. 빠르지만 메시지를 여러 개 보낼 때 shared memory가 하나라면 overrupt 된다.
    cooperating process의 동시 실행은 동기화된 메커니즘이 필요하다. 그 중 하나가 Signal ex. SIGKILL, SIGINT, etc ->얘가 IPC

Threads

- process의 특징
    Resource ownership : process image를 유지할 virtual address space를 포함한다.
    Execution and Scheduling
    위 두가지는 OS와 독립적으로 다루어진다.
- Threads
    process의 실행의 unit (by a group of instructions)
    execution state (running, ready, etc)를 가진다.
    stack, memory for registers context

- Multi threading
    process는 동시에 실행 가능한 threads들로 나누어진다. (각 thread마다 registers, stack은 있고 code, data는 공유)

- thread의 이점
    thread는 register와 stack만 필요 (미니 PCB) -> 그래서 만드는 데 적게 걸림.
    process를 switch 하려면 메모리 (code, data, file)도 바꿔야해서 시간이 걸리지만 thread switch 하려면 register, stack만 바꾸면 끝.

User-level thread : user space에서 thread 생성. 커널 입장에서는 process하나니까 single-thread가 됨. 여기서는 thread 하나 block되면 process 전체가 block 됨.
->이점 : kernel-level thread보다 overhead가 적음. user-level threads는 어떠한 OS 위에서도 실행 가능.
Kernel-level thread : kernel space에서 thread 생성. 여기서는 thread 하나 block 되며녀 다음 thread로 넘어감.
->이점 : blocking system call 호출하면 process의 모든 threads가 blocked. multithread는 multiprocessing의 장점이 없음.

 

'STUDY > 운영체제' 카테고리의 다른 글

[2019.06.27] Concurrency : Mutual Exclusion and Synchronization  (0) 2019.06.27
[2019.06.26] File Management  (0) 2019.06.26
[2019.06.25] IO Interrupt, Disk  (0) 2019.06.25
[2019.06.20] Process  (0) 2019.06.20
[2019.06.19] Operating System  (0) 2019.06.19