Exceptional Control Flow

스근한국밥한그릇·2025년 1월 1일
0

SYSTEM

목록 보기
6/15

1. Exceptions and Processes

  • Jump, branch, call, ret => program state
  • 0으로 나누는 명령어, 키보드 명령어 ... 등은 system state 변화시킴
    • 예외적인 control flow 필요

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 통해 처리
  • 이후 현재 작업으로 다시 돌아갈지, 다른 작업 할지, 중단 할지 정함
  • Excption Tables
  1. 해당 테이블에는 Exception numbers를 가지는 Exception 들어있다
  2. 각 ecxception들은 주소값을 가지고 event handler가 해당 주소 참조
  • 동기화 예외
  • Timer interrupt, 외부 디바이스로부터의 I/O interrupt
    1.. Traps : 의도적으로 프로그램이 일으킬수 있는 시스템 콜
    • system call : read, write, open, close, fork, execve ...
    • returns control to "next" instruction
  1. Faults : 의도적이진 않지만 회복 가능
  • page faults protection faults
  1. Aborts : 의도하지 않았고, 회복이 불가능한 상태
  • illegal instruction, parity error(S/DRAM data 변조시)

1-3 Processes

  1. 메모리에 적재되어 실해중인 프로그램
  2. 프로세스는 각 프로그램에게 두개의 중요한 추상적 정보 제공
    • logical control flow
      • 각 프로그램은 독립적으로 CPU 사용 가능
      • context switch 커널 메커니즘 제공
      • 독립적 Logical flow 가지고 동시에 수행
    • Private address space
      • 각 프로그램은 메인을 독점적으로 사용
      • 가상 메모리는 커널 메커니즘 제공
  3. Multiprocessing
    • 현재 레지스터를 메모리에 저장 => 다른거 실행하기 위해 back-up
    • 실행을 위해 다른 프로세스 스케쥴링
    • 저장된 레지스터를 적재하고 address space 바꿈 => 문맥전환
    • Main memory 공유
  4. Concurrent Processes
    • A -> B -> A (다시 돌아옴)
  5. Sequenttial
    • A -> B (종료된 후 시작)
  6. Context Switching
    • process A -> B 로 바뀔때
    • 각 모드를 바꿈(user, root, kernel ...)
  7. System Call Error handling
    • error no : return -1
    • 정상 : 0
    • Error-handling wrappers 사용 이유
    • cost size 감소, Readability 증가(모듈화, 재사용성)
    • Terminate
      • main에서 Ret
      • exit : void type func, 정상 : return 0
  8. int fork(void)
    • child : return 0
    • parents : return 0이 아닌값
    • 부모의 contents를 복사한채로 가져옴, 분리되어있다
    • return 2개, child = 0, parents != 0 => 서로 다른 PID

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

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

profile
항상 든든하게 코딩 한그릇🧑‍💻🍚

0개의 댓글