일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 인터럽트
- 세마포어
- 프로세스
- 우선순위
- 기아 상태
- 가상 메모리
- concurrency
- Algorithm
- PYTHON
- 페이징
- 스레드
- 추상화
- 페이지 대치
- BOJ
- 알고리즘
- 페이지 부재율
- 단편화
- 백준
- fork()
- Oracle
- 스케줄링
- 동기화
- mutex
- 부동소수점
- 컴퓨터구조
- 교착상태
- 운영체제
- ALU
- mips
- 트랩
- Today
- Total
봉황대 in CS
[Chapter 2. 시스템 구조] 시스템 호출 본문
[Chapter 2. 시스템 구조] 시스템 호출
등 긁는 봉황대 2022. 7. 5. 21:39* 본 글은 '운영체제(Operating System: Concepts) 9th edition'의 내용과 2021학년도 1학기에 수강한 '운영체제' 과목 강의 내용을 함께 정리하여 작성하였습니다.
운영체제를 살펴보는 관점에는 3가지가 있다.
1. 운영체제가 제공하는 서비스
2. 운영체제가 사용자 및 프로그래머에게 제공하는 인터페이스
3. 시스템의 구성 요소와 그들의 상호 연결
이번엔 두 번째 관점에 대하여 알아보자.
시스템 호출 (System Call)
시스템 호출은 운영체제에 의해 사용 가능하게 된 서비스에 대한 인터페이스를 제공해준다.
시스템 호출은 어떻게 사용되는가에 대해 알아보기 위해서
한 파일로부터 데이터를 읽어서 다른 파일로 복사하는 프로그램을 작성한다고 가정해보자.
먼저 입력 파일과 출력 파일의 이름을 입력받아야 하는데, 이것은 운영체제의 설계에 따라 여러 방법으로 지정할 수 있다.
(ex. 대화식 시스템으로 프로그램이 사용자에게 두 파일의 이름을 요청)
두 파일의 이름이 얻어지면
프로그램은 입력 파일을 오픈, 출력 파일을 생성 → 입력 파일로부터 정보를 읽어서 출력 파일에 기록을 하는 루프를 수행한다.
각각의 연산은 각각 다른 시스템 호출을 필요로 하며, 오류 발생 시 추가적인 시스템 호출이 필요하다.
하지만 사용자들은 이렇게 세세하게 운영체제의 기능들을 사용하고 있다는 것을 알지 못하는데,
이는 사용자가 응용 프로그래밍 인터페이스(Application Programming Inteface, API)에 따라 프로그램을 설계하고
API를 구성하는 함수들이 대신하여 시스템 호출을 부르기 때문이다. (ex. UNIX, Linux 시스템의 libc 라이브러리)
실행시간 지원 시스템(파일러와 함께 제공되는 라이브러리에 내장된 함수의 집합)은 시스템 호출 인터페이스(System call interface)를 제공한다.
여기에는 각 시스템 호출에 할당된 번호가 색인된 시스템 호출 테이블이 존재한다.
시스템 호출 인터페이스는 API 함수의 호출을 가로채서 필요한 운영체제 시스템 호출을 부르고, 시스템 호출의 상태와 반환 값을 돌려준다.
따라서 호출자는 시스템 호출이 어떻게 구현되고 실행 중 무슨 작업을 하는지 아무것도 알 필요가 없다.
[ 정리 ]
운영체제 인터페이스에 대한 자세한 내용들을 API에 의해 (+ 시스템 호출 인터페이스에 의해) 프로그래머로부터 숨겨지고,
실행시간 지원 라이브러리에 의해 관리된다.
open() 함수를 예시로 들자면 다음과 같은 순서로 시스템 호출이 이루어진다.
1. (사용자 모드) 응용 프로그램이 open() 함수를 호출 → 시스템 호출로 전환
2. (커널 모드) 시스템 호출 인터페이스 내의 시스템 호출 테이블에서 해당 함수가 i번 함수임을 알아냄 → 처리 수행
3. (커널 모드) 시스템 호출의 호출 상태 & 반환 값 반환
4. (사용자 모드)로 돌아가 open() 함수를 호출한 응용 프로그램의 다음 라인을 수행
* 커널은 시스템 호출 사실을 어떻게 알게 되는가?
시스템 호출 번호를 CPU 내 레지스터에 기록, 트랩(trap) 명령어를 실행하는 것을 통해 호출 사실을 알게 된다.
운영체제에 매개변수를 전달하는 방법
1. 레지스터를 통한 주소 전달 (in. Linux, Solaris)
메모리 상의 블록이나 테이블에 매개변수 값을 기록한 후 시작 주소를 레지스터에 기록
→ 커널에서 레지스터 상의 주소를 얻어 매개변수에 접근한다.
2. Stack를 통한 주소 전달
스택에 매개변수 값을 push → 커널에서 pop
시스템 호출의 유형
1. 프로세스 제어 (Process Control)
2. 파일 조작 (File Management)
3. 주변 장치 조작 (Device Management)
4. 정보 관리 (책에서는 정보의 유지 Information Maintenance)
6. 통신 (Communication)
7. 보호 (Protection)
'Computer Science & Engineering > Operating System' 카테고리의 다른 글
[Chapter 3. 프로세스] 프로세스와 문맥 (0) | 2022.07.07 |
---|---|
[Chapter 2. 시스템 구조] 모놀리식 커널과 마이크로 커널 (0) | 2022.07.06 |
[Chapter 2. 시스템 구조] 운영체제 서비스 (0) | 2022.07.05 |
[Chapter 1. 서론] 다중 프로그래밍과 시분할 시스템 (0) | 2022.07.02 |
[Chapter 1. 서론] 이중 연산 모드와 모드 비트 (0) | 2022.07.01 |