티스토리 뷰
process의 상태 - new, ready, running, waiting, terminated : 5-state process model
new: 프로세스가 만들어 지는 중
ready: 할당되기를 기다리는 상태
running: 인스트럭션이 실행되는 상태, 일 하는중
waiting: 어떤 event가 일어나길 기다리는 상태
terminated: 실행 끝, 프로세스가 다 수행되어서 종료할 때 잠시 생김
어떤 책에서는 waiting을 Blocked나 I/O bound라고 표현하기도 한다!!
ready와 waiting의 차이를 잘 알자
사용자의 행동을 기다릴 때 running에서 기다리지 말고 waiting으로 넘겨버리고
사용자가 행동을 해줬다면 waiting에서 ready로 넘기고 CPU의 스케줄러가 스케줄링을 해줄 때까지 기다린다.
스케줄링: ready인 여러개 중에서 하나를 고르는 것
dispatch: 고른 애를 CPU에 올려놓는 것
Suspended Process를 추가한 경우
Swapping: ready상태의 process가 하나도 없다면, 너무 오랫동안 waiting 상태에 있었던 process를 메인메모리에서 디스크의 suspend queue에 넣어버린다.
1개의 suspend state
2개의 suspend state
리눅스에서의 process state
Running
Interruptible
Uninterruptible
Stopped
예시
Producer-Consumer
리눅스에서 task creation 과정
fork(): caller task 모두 복사하기
clone(): caller task의 일부 공간을 share함
fork()->do_fork()->copy_process()를 콜 하는데 copy_process()에서 하는 일
- copy_files()
- copy_signal()
- copy_mm() : address space를 복사.
- 근데 모든 page frame을 복사하기에는 시간이 많이 드니까.. Copy-on-Write(Cow)를 한다!! owner중에 한명이 변경하기 전까지는 같은 곳을 참조하고 있다가 변경하면 그제서야 복사 하는것
- 그 전에는 Page Table만 복사해둔다.
- copy_namespaces()
- copy_thread()
[출처]
https://jhnyang.tistory.com/103
'OS' 카테고리의 다른 글
[OperatingSystem] 스레드와 프로세스의 차이 (0) | 2021.04.18 |
---|---|
[OperatingSystem] 프레임, 페이지 (0) | 2020.05.31 |