Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- jest
- typeORM
- react
- flask
- mongoose
- 공룡게임
- AWS
- dfs
- MongoDB
- JavaScript
- Python
- Bull
- TypeScript
- Sequelize
- Dinosaur
- Nest.js
- class
- cookie
- nestjs
- OCR
- game
- nodejs
- Queue
- 정렬
- GIT
- MySQL
- 게임
- Express
- 자료구조
Archives
- Today
- Total
포시코딩
[운영체제] 3. 프로세스 관리 (4) 본문
728x90
키워드
fork, exec, wait, exit, 시스템 콜, 협력, IPC, message passing
fork() 시스템 콜
- 부모 프로세스가 코드를 실행하다 fork()를 만나면 자식 프로세스가 생성됨
- 부모 프로세스는 이어서 밑의 코드 계속 실행
- 자식 프로세스는 새롭게 만들어졌지만 메인 함수의 처음부터 실행하는게 아니라
fork()를 실행한 그 이후부터 실행
부모 프로세스의 문맥(컨텍스트)를 그대로 복사하기 때문에
PC가 가리키는 곳 그대로 복사되어 fork()가 끝나는 시점부터 실행
ex) 한 사람이 복제되면 애기를 낳는게 아니라 똑같이 생긴 사람이 하나 만들어진다고 생각 - 만약 자식 프로세스가 원본이라고 주장하거나, 제어 흐름이 같은 경우를 대비해
부모와 자식을 구분해야 함
-> 부모 프로세스는 fork() 함수의 리턴 결과 값이 양수(자식 프로세스의 PID)
-> 자식 프로세스는 fork() 결과 값으로 0을 리턴 받음
exec() 시스템 콜
- 어떠한 프로그램을 완전히 새로운 프로세스로 태어나게 해주는 역할
- (사진)자식 프로세스를 fork() 후 date라는 프로그램을 덮어 씌우는 코드
- 한번 execlp() 하게되면 되돌아 갈 수 없음
- 꼭 자식을 만든 후 exec() 할 필요는 없음. fork() 없이
이럴 경우 execlp() 이후의 코드는 영원히 실행 불가 (새로운 프로그램으로 덮어씌워지니) - execlp() 사용법
- 프로그램 이름 두번
- 프로그램에 전달할 argument 작성(""와 ,로 구분)
- (char *) 0로 마무리
wait() 시스템 콜
- 프로세스를 block 상태로 잠들게 함
- 보통 자식 프로세스를 만든 후 wait() 시스템 콜을 하게 됨
- 자식 프로세스가 종료되길 기다리면서 block 상태가 됨
- 자식 프로세스가 종료되면 부모 프로세스가 block 상태에서 ready 상태로 바뀌면서 cpu를 얻음
exit() 시스템 콜
프로세스를 종료할 때 호출하는 시스템 콜
자발적 종료
- 마지막 statement 수행 후 exit() 시스템 콜을 통해
- 프로그램에 명시적으로 적어주지 않아도 main 함수가 리턴되는 위치에 컴파일러가 넣어줌
비자발적 종료
- 부모 프로세스가 자식 프로세스를 강제 종료시킴
- 자식 프로세스가 한계치를 넘어서는 자원 요청
- 자식에게 할당된 태스크가 더 이상 필요하지 않음
- 키보드로 kill, break 등을 친 경우
- 부모가 종료하는 경우
- 부모 프로세스가 종료하기 전에 자식들이 먼저 종료
프로세스와 관련된 시스템 콜
fork()
부모 프로세스 복제 생성
exec()
완전히 새로운 프로그램으로 덮어 씌움
wait()
자식이 종료될 때까지 잠들어 기다림
exit()
모든 자원을 반납 후, 부모 프로세스에게 죽는다고 알림(프로세스를 종료)
프로세스 간 협력
독립적 프로세스
프로세스는 각자의 주소 공간을 가지고 수행되므로
원칙적으로 하나의 프로세스는 다른 프로세스의 수행에 영향을 미치지 못함
협력 프로세스
프로세스 협력 메커니즘을 통해 하나의 프로세스가 다른 프로세스의 수행에 영향을 미칠 수 있음
프로세스 간 협력 메커니즘 (IPC)
(=Interprocess Communication)
- 메시지를 전달하는 방법(message passing)
- 커널을 통해 메시지 전달
- 프로세스 A가 프로세스 B한테 메시지를 전달하는 걸 생각
- 원칙적으로 프로세스 끼리 직접 메시지를 전달할 방법은 없음
중간에 커널이 메신저 역할을 해서 전달 가능
- 주소 공간을 공유하는 방법(shared memory)
- 서로 다른 프로세스 간에도 일부 주소 공간을 공유하게 하는 shared memory 메커니즘이 있음
- * thread: 스레드는 사실상 하나의 프로세스이므로 프로세스 간 협력으로 보긴 어렵지만
동일한 프로세스를 구성하는 스레드들간에는 주소 공간을 공유하므로 협력이 가능하다.
Message Passing
Message system
- 프로세스 사이에 공유 변수(shared variable)를 일체 사용하지 않고 통신하는 시스템
- 아래 두가지 방법으로 나뉨
- 둘 다 커널을 통해 메시지를 전달하는건 동일
- 메시지를 받아볼 프로세스를 명시하냐, 메일박스에 메시지를 집어넣냐의 차이
Direct Communication
통신하려는 프로세스의 이름을 명시적으로 표시
Q한테, P가 메시지 전달
Indirect Communication
mailbox(또는 port)를 통해 메시지를 간접 전달
누가 받을지가 아닌 M(Mailbox)에 전달
728x90
'CS (Computer Science)' 카테고리의 다른 글
[운영체제] 4. CPU Scheduling (2) (0) | 2023.05.01 |
---|---|
[운영체제] 4. CPU Scheduling (1) (0) | 2023.04.28 |
[운영체제] 3. 프로세스 관리 (3) - 생성, 종료 (0) | 2023.04.28 |
[운영체제] 3. 프로세스 관리 (2) - Thread (0) | 2023.04.28 |
[운영체제] 3. 프로세스 관리 (1) - Process (0) | 2023.04.20 |