- 프로세스: 실행중인 프로그램(Program in Exectuion)
- 프로세스는 작업을 완료하기위해 자원들이 필요함
- CPU Time
- memory
- files
- I/O devies
- 프로세스의 메모리 구조는 여러 부분으로 나눠짐
- Text Section: 함수 코드
- Data Section: 전역 변수
- Heap Section: 동적할당을 위한 영역
- Stack Section: 함수를 실행하면서 사용하는 영역

-
gcc 3.1 memory layout.c
-
size ./a.out
-
os는 프로세스를 어떻게 관리하는가?
- 프로세스는 상태를 갖고 있음
- New: 생성된 상태
- Running: 명령어가 실행중
- Waiting: 프로세스가 특정 이벤트가 일어나길 기다리고 있음
- Ready: 프로세스가 프로세서에 할당되길 기다리고 있음
- Terminated: 프로세스가 실행을 종료함

- 프로세스는 상태를 갖고 있음
-
waiting queue
-
scheduler dispatch: ready에서 running으로 만드는 것
-
프로세스 관리하는 법
-
PCB(Process Countrol Block), TCB(Task Countrol Block)
- 프로세스의 모든 상태를 PCB에 넣어서 관리하는 구조체
- 담고 있는 정보
- Process state
- Context
- Program Counter: 명령어 메모리 주소
- CPU registers
- CPU-scheduling information
- Accounting Information
-
Process는 a single thread(한줄로) of execution
- single thread: only one task at a time
-
multi thread
-
스레드: 가벼운 프로세스(lightweight process)
-
multi 프로그래밍의 목적: 동시에 돌아가는 프로세스를 구현 하기 위함
- CPU 사용 효율을 극대화하기 위함
-
time sharing
- 프로세스간 CPU 코어를 빠르게, 자주 전환해, 마치 동시에 실행되고 있는 것처럼 보이게 하자
-
scheduling queues
- ready queue, wait queue
- PCB의 링크드 리스트로 구현
-
waiting queue는 여러개 있을 수 있음
Context Switch: CPU 코어를 다른 프로세스로 전환
- 현재 프로그램의 Context를 저장
- 다음 프로그램의 Context를 불러옴
-
os는 반드시 프로세스 생성과 종료 메커니즘을 제공해야함
-
프로세스 생성
- fork

- fork
-
실행의 2가지 방식
- 부모와 자식을 동시에 실행하는 방식
- 자식 프로세스가 종료될까지 기다리는 방식
-
주소 공관 관점에서 2가지
- 부모 프로세스를 복제하는 경우
- 자식 프로세스가 새로운 프로그램을 로드하는 경우
-
종료 방식
- 마지막 명령문을 실행시킴
- exit 시스템 call
-
예외 사항
- orphan: 부모가 없는 프로세스
- zombie: 부모가 wait을 하지 않는 상태에서 종료된 자식 프로세스 zombie