1. Exceptions and Processes
- Jump, branch, call, ret => program state
- 0으로 나누는 명령어, 키보드 명령어 ... 등은 system state 변화시킴
1-1 Exceptional Control Flow
- low level
- Exceptions : H/W, OS S/W의 조합등을 이용해서 구현
- Higher level
- Process Context switch : OS SW and HW
- Signals : OS SW
- Nonlocal jumps : C runtime library
1-2 Excepion
- 여러 예외 상황 발생할때 마다 Kernel로 context switch
- kernel은 해당 예외 보고 handler 통해 처리
- 이후 현재 작업으로 다시 돌아갈지, 다른 작업 할지, 중단 할지 정함
- 해당 테이블에는 Exception numbers를 가지는 Exception 들어있다
- 각 ecxception들은 주소값을 가지고 event handler가 해당 주소 참조
- Timer interrupt, 외부 디바이스로부터의 I/O interrupt
1.. Traps : 의도적으로 프로그램이 일으킬수 있는 시스템 콜
- system call : read, write, open, close, fork, execve ...
- returns control to "next" instruction
- Faults : 의도적이진 않지만 회복 가능
- page faults protection faults
- Aborts : 의도하지 않았고, 회복이 불가능한 상태
- illegal instruction, parity error(S/DRAM data 변조시)
1-3 Processes
- 메모리에 적재되어 실해중인 프로그램
- 프로세스는 각 프로그램에게 두개의 중요한 추상적 정보 제공
- logical control flow
- 각 프로그램은 독립적으로 CPU 사용 가능
- context switch 커널 메커니즘 제공
- 독립적 Logical flow 가지고 동시에 수행
- Private address space
- 각 프로그램은 메인을 독점적으로 사용
- 가상 메모리는 커널 메커니즘 제공
- Multiprocessing
- 현재 레지스터를 메모리에 저장 => 다른거 실행하기 위해 back-up
- 실행을 위해 다른 프로세스 스케쥴링
- 저장된 레지스터를 적재하고 address space 바꿈 => 문맥전환
- Main memory 공유
- Concurrent Processes
- Sequenttial
- Context Switching
- process A -> B 로 바뀔때
- 각 모드를 바꿈(user, root, kernel ...)
- System Call Error handling
- error no : return -1
- 정상 : 0
- Error-handling wrappers 사용 이유
- cost size 감소, Readability 증가(모듈화, 재사용성)
- Terminate
- main에서 Ret
- exit : void type func, 정상 : return 0
- int fork(void)
- child : return 0
- parents : return 0이 아닌값
- 부모의 contents를 복사한채로 가져옴, 분리되어있다
- return 2개, child = 0, parents != 0 => 서로 다른 PID

- 부모의 프로세스가 먼저 실행될지, 자식의 프로세스가 먼저 실행될지는 예상하지 못함

- 흐름은 Left -> Right가 되어야함 => e -> f = R -> L
