본문 바로가기
코딩코딩/운영체제

kernel_of_linux

by g0n1 2022. 5. 30.
728x90

Terminology

  • Kernel: Unix 메모리에 상주(memory resident)하는 C 프로그램
  • Utility: command라고도 불리며 디스크에 저장되어 있고 필요할 대 마다 불러옴(loaded on demand)
  • Shell: Unix interface to user, read keyboard input & execute command
  • file: sequence of bytes, I/O나 통신을 위한 소켓들도 모두 파일이다.

How Kernel-Shell-Untilities are related

  • 커널 - 쉘 - 사용자 프로그램의 계층구조

시스템콜

  1. 유저가 write같은 시스템콜을 요청
  2. int $0x80이 HW 트랩을 발생시킴
  3. HW가 CPU의 모드를 user->kernel로 변경
  4. HW가 trap handler로 jump 이동
  5. 핸들러는 커널 안의 assembly function을 수행
  6. 현재의 state vector를 저장
  7. 유효한 syscall number인지 확인하고 system call table을 참조해 적절한 핸들러의 위치를 찾아 호출한다.
  8. 유저의 state vector를 복원하고 kernel->user로 변경

 

Manual

(1) : commnad
(2) : system call
(3) : library functions

Kernel

  • 커널은 사용자 프로그램을 support 해주기 위한 프로그램임
  • 다른 프로그램과 마찬가지로 자료구조, 함수가 있음
  • 프로세스와 하드웨어를 관리함
  • 각 프로세서와 하드웨어를 관리하기 위한 Data Structure를 갖고 있음.

 

fork()

  • 부모프로세스의 모든 정보를 복사함
  • PCB와 a.out(page table, pointers, ... )
  • fork로 생성된 자식은 PID만 다르고 모든 정보가 똑같음.
  • 2개의 return

exec()

  • disk에서 해당하는 a.out file을 load함
  • init a.out(PC가 load한 a.out의 main을 가리키게)

context switch - schedule()

  • read, wait, exit
  • save current CPU state
  • load CPU registers

 

 

728x90

댓글