1. TASK_STOPPED 상태전이
process가 SIGSTOP, SIGTSTP, SIGTTIN, or SIGTTOU 시그널을 받으면 이상태로 빠질 수 있다.
디버거가 테스트 프로그램을 추적하기 위하여 ptrace() system call을 수행했을 때와 같이 하나의 process가 또 다른 Process에 의하여 모니터되고 있을 때, 각 시그널들은 그 프로세스를 TASK_STOP상태로 만든다.
다른 프로세스에 의해 일시적으로 동작이 멈춰졌을 때 일시적으로 이 상태에 빠지는 것 같습니다.
일반적인 Signal처리가 User Mode Process를 Kernel Mode로 전환시키는 것을 생각한다면,
TASK_RUNNING -> TASK_STOPPED 전환은 signal에 대한 특수한 적용 case로 봐도 좋을 듯 합니다.
참고하세요.
2. COW 구동방식
kernel은 process의 전 주소 공간이 아니라 단지 page tables만을 copy한다.
parent process와 child process의 주소 공간이 동시에 같은 physical pages를 가르킨다.
parent process와 child process는 둘다 해당 pages에 대하여 read access 권한만을 가진다.
만약 둘중 하나의 process가 그 복사된 pages에 쓰기를 시도한다면, 그 process는 access error를 kernel에게 알려준다.
access error를 받은 커널은 page fault handler를 통하여 다음을 판단한다.
error page는 user space address인가? - yes
요구된 address에 mapping이 존재하는가? - yes
동작이 write access인가? - yes
해당 공간이 쓰기가능인가? - yes
이 모든 조건이 다 만족되면 비로소 copy on write가 발생합니다. 참고하세요.
댓글 0
.