티스토리 뷰
📌 프로세스의 연산
실행되는 동안 프로세스들은 여러개의 프로세스들을 생성한다.
이 때 생성하는 주체는 부모 프로세스, 새로운 프로세스는 자식 프로세스이다.
대부분의 운영체제는 고유의 프로세스 식별자 (pid)를 사용하여 프로세스를 구분한다.
프로세스가 자식 프로세스를 생성할 때
- 자식 프로세스는 운영체제에게 자원을 직접 얻을 수 있다.
- 혹은 부모 프로세스가 가진 자원의 부분 집합만을 사용하도록 제한 -> 자바의 상속같은..!
프로세스가 새로운 프로세스를 생성할 때
- 부모 프로세스는 자식 프로세스와 동시에 실행.
- 혹은 부모 프로세스는 자식 프로세스 전부/일부가 종료될 때까지 대기
📝 프로세스의 생성 흐름
1) fork() 시스템 콜로 새로운 프로세스(자식) 생성. (프로세스 혼자만으론 자식 프로세스 생성이 불가하므로 시스템콜로 OS에게 요청)
자식은 부모의 프로세스 복붙. 그래서 자식 프로세스의 시작점은 부모와 같음. 이 때 자식의 pid는 0이됨.
2) 두 프로세스 중 한 프로세스가 exec() 시스템 콜을 사용. 자신의 메모리 공간을 새로운 프로그램으로 교체.
부모는 exec()를 통해 부모 PCB를 자식으로 교체하여 실행시킴.
3) exec() 시스템 콜을 바이너리 파일을 메모리로 적재. 프로그램 실행 시작. -> 비로소 프로세스가 됨.
부모는 wait
4) 자식 프로세스가 종료될 때 부모 프로세스는 exit() 하여 자원 반납.
즉 fork() 로 자식 프로세스 생성하고, 그 자식의 pid는 0이 됨.
exec()를 통해 자식이 실행됨, 그동안 부모는 웨이팅.
자식 끝나면 부모도 나머지 실행할거 하다가 exit()
📝 프로세스의 종료
최종 실행이 종료된 뒤 exit() 를 통해 운영체제에 삭제를 요청함.
- 대기중인 부모 프로세스에게 상태 값을 리턴.
- 운영체제에 의해 모든 프로세스의 자원들은 할당 해제
부모 프로세스가 자식 프로세스를 종료시키는 경우 (abort())
- 자식이 할당된 자원의 사용량을 초과하는 경우
- 자식 task가 더 이상 필요하지 않은 경우
- 부모가 종료되었고, 자식이 종료되지 않았을 때 자식만 실행될 순 없음.
좀비 프로세스 (zombi process)
- 종료 처리 중 멈춰있는 상태의 프로세스: 완전히 종료된 것이 아니지만 실행중도 아닌 프로세스
- 종료되었지만, 부모 프로세스가 아직 wait() 콜 하지 않는 프로세스
- 부모가 wait() 콜하면 좀비 프로세스의 pid와 프로세스 테이블 항목이 운영체제에게 반환.
- 그래서 되게 짧은 시간동안 좀비 프로세스가 되다가 반환됨.
고아 프로세스 (orphan process)
- 부모 프로세스가 wait() 콜하는 대신 종료하게 되면 자식은 고아 프로세스가 됨.
- Linux, UNIX 계열은 고아 프로세스의 새로운 부모 프로세스로 init 프로세스를 지정하여 문제를 해결함.
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 소켓 통신, 서버 - 클라이언트 통신, RPC (2) | 2023.10.23 |
---|---|
[운영체제] 프로세스 간 통신 (1) | 2023.10.23 |
[운영체제] 프로세스, 스케쥴링, 컨텍스트 스위칭 (0) | 2023.10.22 |
[운영체제] 운영체제의 서비스, 시스템 콜 (0) | 2023.10.21 |
[운영체제] 1. 운영체제와 컴퓨터 (0) | 2023.10.21 |
- Total
- Today
- Yesterday
- 백준
- 그룹스터디
- qjzl
- 국비지원캠프
- 채팅기능개발
- 프로젝트후기
- 부트캠프
- 패스트캠퍼스강의
- boj
- #국비지원취업
- TiL
- 과정중간회고
- 데이터베이스
- 백엔드개발자
- 백엔드부트캠프
- 그룹스터디워크샵
- 커리어멘토링
- 야놀자
- 국비지원취업
- 백엔드
- 스터디후기
- 자료구조
- 패스트캠퍼스
- 카카오API
- Java
- 국비지원
- 야놀자X패스트캠퍼스부트캠프
- springboot
- 자료구조 #스택 #큐 #덱 #선형자료구조
- be
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |