OS 수업 정리
Terminologies: Kernel and Utility
Kernel
- OS 중 메모리에 상주하고 있는 부분
- 대부분 C로 작성되었으며, 일부 assembler로 작성됨(HW dependent, speed)
- function들의 집합으로 구성됨
- 필수 기능들을 제공함(Process 관리, synchronization, CPU scheduling, 메모리 관리, 디바이스 관리, interrupt handling 등)
- system call을 이용해 서비스를 제공함
Utility(= commands)
디스크에 상주하는 프로그램. 필요에 의해 load된다.
Shell
유틸리티(commands)를 제어하는 특수 utility.
위 세 가지 요소 중 어디까지를 OS로 보느냐는 정의하는 사람마다 다름.
Resource Protection
Dual-Mode
어떤 프로그램이 다른 유저의 프로그램을 비정상적으로 종료시키는 문제를 해결하기 위해 나온 개념. mode bit을 저장하는 하드웨어(PSW register)를 통해 mode(kernel mode, user mode 등)를 관리한다. User mode에 있는 프로그램이 Kernel mode에서만 할 수 있는 지시문을 수행하고자 하는 경우 해당 지시문에서 멈춘 후 mode bit을 바꿔 kernel에 진입한 후 문제를 해결한다. (이를 Mode transition이라 부름)
interrupt, trap, system call 세 가지의 방법을 통해서만 kernel mode에 진입할 수 있으며, 이를 통해 컴퓨터 자원을 protect한다. => Kernel Entry Point
CPU Protection
- 의미
CPU를 독점하는 것을 막는 것을 의미함(보안의 개념이 절대 아님). 이를 지원하기 위해 timer 하드웨어가 필요하다.
- System timer(= Programmable internal timer; PIT)
- Timer interrupt handler in Linux
- jiffies를 업데이트함
- xtime에 저장되어있는 wall time 업데이트
- process time 업데이트
Memory Protection
- Memory management unit(MMU) : pysical address와 logical address 간 translation 담당
cpu가 virtaul(logical) address를 넘겨주면 자체적으로 혹은 TLB(주소 계산을 위한 cache)를 이용해 physical address를 반환
I/O Protection
- 모든 I/O instruction들은 privileged하다. 이를 통해 input과 output을 보호
- 사용자가 직접 I/O에 접근할 수 없음(무조건 OS를 통해야만 한다)
- 어떠한 방식으로 user program이 user mode에서 kernel mode로 진입할 수 있는가?
-> by System Call!!
System Call
개요
- 정의
- OS service를 위한 Programming Interface
- 응용프로그램이 OS와 교류할 수 있게 도와줌
- 목적
- To protect system resource; OS와 user program의 구분
- For reliability; 무한루프, exhaust memory 등 방지
- For security; 허용되지 않은 user program의 read/write 방지
문맥에 따라 trap을 system call까지 포함하는 용어로 사용하기도 함
- system call의 개수
- Well-defined OS의 경우 200개의 system call이 존재(in moder OS) - 따라서 이들의 효율적인 사용을 위해 user program은 system call에 직접 접근하지 않고, API를 사용하여 접근한다.(e.g. printf는 궁극적으로 write을 호출함 / interrupt를 의도적으로 발생시킨다는 점에서 일반 라이브러리와는 다름)
- OS마다 다른 system call - 가장 많이 사용되는 3가지의 API
- POSIX API (UNIX, Linux, Mac OS)
- Win32 API for Windows
- JAVA API for Java virtual machine
사용
- User program 입장
- 라이브러리에 있는 system call function 호출
- 매개변수를 register에 넣고 stack에 저장
- syscal number를 특정 수(OS마다 다름)로 특정 레지스터에 저장(eax register)
- syscal machine instruction 수행(e.g. x86 - int 0x80)
- Kernel 입장
- syscal intrrupt handler 실행
- system call table에 있는 커널 함수를 실행
- 결과를 특정 레지스터에 저장
- RETURN_FROM_INTERRUPT
Parameter passing
- register를 사용해 직접 전달
가장 간단하지만, 전달하려는 인자가 register보다 많은 경우가 있을 수 있음
- 인자를 메모리 내 특정 Block에 저장 후, Block의 주소를 register에 넣고 이를 전달
- 인자를 Stack에 저장 후 stack의 주소를 register에 넣고 이를 전달
Type of system call
크게 6가지의 카테고리로 구분됨
- Process
- Scheduling
- Interprocess communication(IPC)
- File system
- Socket(networking) ex. socket, bind, listen, accept, connect, receive/send
- 그 외의 것들
21.04.01 CPU Protection 하다 맒
21.04.02 전체 다 완료