- 운영체제: Application(최상위)이 Hardware(최하위)를 사용하기 편리하게 하는 SW
- OS is interrupt-driven: 인터럽트 없이는 아무것도 안 한다
- HW interrupt VS SW interrupt(a.k.a trap)
- Dual-mode operation & Timer / 모드는 여러 개일 수 있음 Ex) ARM processor: 8개 모드
User and other system programs |
UI(GUI / Batch / Command line) |
System calls |
Service |
운영체제 |
Hardware |
Service: 프로그램 실행, I/O operations, File systems, Resource allocation, ...
System call: 상위 Layer에 있는 SW들이 운영체제에 있는 특정 서비스를 요청하기 위해 사용한다.
Ex) read() 함수 호출 시 운영체제가 파일에서 데이터를 읽어준다.
아니면 읽어올 데이터가 어느 disk block에 저장되어있는지 확인하고 disk controller를 access해 해당 block을 읽어오도록 코딩해야 되지만 이러한 작업은 운영체제가 해주기 때문에 우리는 운영체제에 요청만 하면 된다.
* 왜 syscall을 사용하는가?
Program이 서비스를 잘못 사용해 시스템에 치명적인 영향을 미치는 것을 막기 위해 OS에 요청해 OS가 작업을 수행하도록 한다.
System call(중요)
운영체제가 제공하는 서비스를 호출하기 위한 programming interface.
운영체제가 사용자 대신 critical한 작업을 수행할 수 있도록 요청하기 위한 programming interface.
-> 사용자가 임의로 이런 작업을 수행할 수 없다.
- 대부분 high level 언어(C/C++)로 작성됨 Ex) WinAPI, Java API
- 모든 System call에 대해 번호가 할당된다: 실제로는 번호로 사용하게 됨 -> 내부적으로 table 관리
- open() 함수를 호출 하면
① user mode에서 라이브러리 함수 호출
② System call interface를 통해 trap 발생: kernel mode로 전환
③ open()과 관련된 system call 번호를 table에서 탐색
④ open()과 관련된 kernel function 호출
⑤ 종료 시 user mode로 전환
- System call 함수의 parameter는 register를 통해 전달된다. -> register는 용량이 작아 한계가 있다.
ⓐ Block method: parameter를 memory 어딘가(block)에 저장한 후 register를 통해 이 block의 주소를 전달한다.
ⓑ Stack method: 위와 같음. 메모리 블록 대신 스택 메모리 사용
System call 함수 정의
- System call 함수 구현 시 kernel coding을 하는 rule을 따라야 한다. Ex) parameter는 stack으로 받는다
- 커널에서 동작하는 함수는 사용자가 사용하는 라이브러리를 사용할 수 없다
- 정의한 System call 함수에 번호를 할당해야 한다(Table 확인 후 안 쓰는 번호).
- System call 함수는 번호로 호출하므로 그 번호 호출 시 내가 정의한 함수가 호출되도록 그 함수를 table에 정의해야 한다.
- System call을 호출하기 위한 System call이 존재한다.(라이브러리에 없으므로)
-> $syscall0(return\_type,\; name,\; arg1,\; arg2,\; \cdots,\; argN)$과 같은 매크로 사용
'강의노트 > 운영체제' 카테고리의 다른 글
[운영체제] 2주차 (3) (0) | 2021.03.14 |
---|---|
[운영체제] 2주차 (2) (0) | 2021.03.13 |
[운영체제] 2주차 (1) (0) | 2021.03.12 |
[운영체제] 1주차 (2) (0) | 2021.03.07 |
[운영체제] 1주차 (1) (0) | 2021.03.05 |