프로그램이 만들어지는 과정
컴파일러
링커
- 여러 Obj 파일과 라이브러리들을 연결해 Exe로 변환
- Exe file: 헤더, 텍스트, 데이터를 포함
로더
프로세스
프로세스 개념
- Execution Unit: 스케쥴링의 단위
- Protection Domain: 프로세스끼리 서로 침범X
프로세스 하는일
- Program Counter: 현재 실행중인 명령어가 어디에 있는지 확인
- Stack: 실행하는 과정에서 발생하는 데이터들 임시 저장/없애는
- Data Section: 원래 갖고있는 데이터들 구역
이 세개를 담고 있는 자료구조
프로세스 상태 Transition
ready : CPU의 명령받을 준비완료!
waiting: 대기중!
문맥 전환(Context Switch)
- CPU가 새 프로세스로 스위치할때 old 프로세스의 스테이트를 업데이트 해주고, new 프로세스에 원래 저장되어있던 놈을 load 해줌
- 컴퓨터 구조의 load 명령어 등을 사용하기 때문에 overhead를 발생시켜
=> overhead는 운영체제에서 1. Pcb를 얼마나 빡세게 관리하는지, 레지스터에 저장되어있는 놈들이 백업되는거기 때문에 2. 레지스터 사이즈에 따라 달라짐
CISC 프로세스 구조
- 복잡한 명령어셋 = 하나의 명령에서 여러개 동작 가능
- 효율 굳.
- 복잡한 회로 -> 레지스터 용량 감소 => 백업하고 로드해야하는 context 용량 작음.
- 클럭 frequency 에서는 불리하지만, context switch overhead에서는 이점.
RISC 프로세스 구조
- 간단한 명령어셋 = 하나의 명령어가 하나의 동작
- 클럭 속도 높아서 frequency 좋음
- 레지스터를 많이 넣을 수 있음 => 백업하고 로드해야하는 context 용량 많음.
- 클럭 frequency 에서는 유리하지만, context switch overhead에서는 불리.
Parent 프로세스와 Child 프로세스
- 프로세스 하나를 복사하는게 새로만드는거 보다 쉬움 (Fork system call)
- 새로운 프로그램이 내용을 다시 채워줌 (Exec system call)
- overhead 줄이는데 큰도움