티스토리 뷰
KOCW 이화여대 반효경 교수님의 2014년 운영체제 강의를 듣고 정리한 내용입니다.
프로세스 관리 2
Copy-on-write (cow)
- write가 발생했을 때 그 때 copy하겠다.
- write: 원래있던 내용을 바꾸는 것
- copy: 부모의 code, data, stack 복사
- write가 발생하기 전까지는 부모 자원 공유
fork() 시스템콜
int main()
{
int pid;
pid = fork();
if (pid == 0) /* this is child */
printf("\n Hello, I am child!\n");
else if (pid > 0) /* this is parent */
printf("\n Hello, I am parent!\n");
}
- fork() : 자식 만들어짐!
- 자식에서는 fork()를 실행한 그 이후 시점부터 실행됨!
- 부모의 context가 복사되므로 program counter 값도 복사되니까!
exec() 시스템콜
int main()
{
int pid;
pid = fork();
if (pid == 0) { /* this is child */
printf("\n Hello, I am child! Now I'll run date \n");
execlp("/bin/date", "/bin/date", (char *)0);
}
else if (pid > 0) /* this is parent */
printf("\n Hello, I am parent!\n");
}
- execlp
- exec 시스템 콜을 함
- 이전의 기억을 지우고 새로운 프로그램으로 덮어씌워짐
- 새로운 프로그램의 시작 부분부터 실행됨
- 다시 돌아갈 수 없음 (새로운 프로그램 실행 다 하면 수행 끝!)
int main() {
printf("\n Hello, I am child! Now I'll run date \n");
execlp("/bin/date", "/bin/date", (char *)0);
printf("\n Hello, I am parent!\n"); // 이 코드는 실행 불가능!!!!!!!!!
}
- fork() 안하고 exec()
- execlp(" ", " ", ~~~~, (char *) 0);
- 프로그램 이름 두번, 전달할 argument (""로 구분), 마지막엔 (char*)0
int main() {
printf("1");
execlp("echo", "echo", "hello", "3", (char *)0);
printf("2");
}
- 출력
- 1
- hello 3
wait() 시스템 콜
- 프로세스 A가 wait() 시스템 콜을 호출하면
- 커널은 child가 종료될 때까지 프로세스 A를 Sleep시킴 (block상태)
- 자식이 종료되기를 기다리며 block 상태가 되는 것
- 자식 프로세스가 종료되면 프로세스 A를 깨움 (ready상태)
- 부모가 block 상태 → ready 상태로 바뀜 (CPU를 얻을 수 있게 됨)
exit() 시스템콜
- 프로세스의 종료
- 자발적 종료
- 마지막 statement 수행 후 exit() 시스템콜을 통해
- 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌
- 비자발적 종료
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
- 자식 프로세스가 한계치를 넘어서는 자원 요청
- 자식에게 할당된 태스크가 더 이상 필요하지 않음
- 키보드로 kill, break 등을 친 경우
- 부모가 종료하는 경우
- 부모 프로세스가 종료하기 전에 자식들이 먼저 종료됨
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
- 자발적 종료
프로세스와 관련한 시스템콜
- fork : create a child (copy)
- exec : overlay new image
- wait : sleep until child is done
- exit : frees all the resources, notify parent
프로세스 간 협력
- 독립적 프로세스
- 프로세스는 각자의 주소 공간을 가지고 수행되므로
- 원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함
- 협력 프로세스
- 프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
프로세스 간 협력 메커니즘 (IPC: Interprocess Communication)
- 프로세스간 정보를 주고받을 수 있는 방법
- Message passing: 커널을 통해 메시지 전달
- Direct Communication: 통신하려는 프로세스의 이름을 명시적으로 표시
- Indirect Communication: mailbox(또는 port)를 통해 메시지를 간접 전달
- Direct, Indirect → 커널 통해 전달하는건 똑같음!
- Indirect → 누가 꺼내볼지는 명시 안함
- Shared memory: 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 메커니즘이 있음
- 커널한테 shared memory를 쓴다는 시스템 콜을 해서 mapping 해놓고
- share하게 해놓은 다음에
- 그 때부터 사용자 프로세스끼리 공유
- Message passing: 커널을 통해 메시지 전달
- A가 Shared Memory에 어떤 내용을 적으면
- B는 자신의 주소 공간에도 포함되어 있기 때문에, 그 내용을 바로 전달받아서 볼 수 있음
'CS공부 > 운영체제' 카테고리의 다른 글
[KOCW 반효경 교수님 운영체제 강의] 프로세스 관리 1 (프로세스 생성/종료) (0) | 2021.04.15 |
---|---|
[KOCW 반효경 교수님 운영체제 강의] 프로세스 3 (Thread) (0) | 2021.04.12 |
[KOCW 반효경 교수님 운영체제 강의] 프로세스 2 (동기식/비동기식 입출력) (0) | 2021.04.12 |
[KOCW 반효경 교수님 운영체제 강의] 프로세스 1 (0) | 2021.04.11 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크