✔️ System Call(시스템 콜) 정의
System call(시스템 호출)이란?
운영 체제의 커널이 제공하는 서비스에 대해 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스이다.
➕ 시스템 콜이 필요한 이유
- 사용자 프로세스가 직접 특권 명령을 수행할 수 없으므로 커널(kernel)의 도움을 받기 위해 시스템 콜을 사용한다.
- 문서는 컴퓨터 저장장치에 저장되어 있고 하드웨어 자원을 관리하는 것은 운영체제이다. 사용자가 어떤 문서를 불러오려고 할 때, 사용자 프로세스는 하드웨어에 저장되어 있는 문서를 불러올 수 없으므로 커널의 도움을 받기 위해 시스템 콜을 호출하게 된다.
✔️ 시스템콜 종류
1. 프로세스 제어(Process Control)
2. 파일 조작 (File Manipulation)
3. 장치 관리 (Device Manipulation)
4. 정보 유지 (Information Maintenance)
5. 통신(communication)
6. 보호(protection)
✔️ CPU 모드
CPU는 사용자 애플리케이션(User Application)이 시스템을 손상시키는 것을 방지하기 위해 '커널 모드(Kernel Mode)' , '사용자 모드(User Mode)'로 나뉘어서 구동된다. 운영체제에서 프로그램이 구동되는데 있어서 파일을 읽어오거나, 파일을 쓰거나, 혹은 화면에 메세지를 출력하는 등 많은 부분에서 커널 모드를 사용한다.
➕ 사용자 모드(User Mode)
사용자 모드(User mode)에서 응용 프로그램 코드가 실행된다. 사용자가 접근할 수 있는 영역은 제한되어 있기 때문에 사용자 모드에서는 운영체제의 자원 및 하드웨어(디스크, I/O 등)에 접근할 수 없다. 관련된 작업을 수행하기 위해서는 '시스템 콜(System Call)'을 이용한다.
➕ 커널 모드(Kernel Mode)
커널 모드(Kernel mode)에서 운영체제의 핵심 부분인 커널이 실행된다. 커널이 하드웨어 자원에 직접 접근이 가능하고, 운영체제의 핵심 기능(프로세스 관리, 파일 시스템, 메모리 관리)을 수행할 수 있다. 시스템 콜(System Call)을 받아 응용 프로그램의 요청을 처리하고 필요한 작업 수행을 수행한다.
fork(), exec(), wait() 와 같은 것들은 Process 생성과 제어를 위한 대표적인 System Call 명령어이다.
- fork, exec 는 새로운 process 생성과 관련된 명령어
- wait 는 process(부모 ; parent)가 만든 다른 process(자식 ; child)가 끝날 때까지 기다리는 명령어
✔️ fork()
fork()를 실행하면, 기존의 프로세스와 거의 동일한 복사본인 자식 프로세스(child)가 생성된다.
- 자식 프로세스는 부모 프로세스의 메모리 공간을 복제하지만, 각자 독립적인 주소 공간을 갖습니다.
- 자식 프로세스는 부모 프로세스의 자원(파일 디스크립터 등)을 복제합니다.
✔️ exec()
exec는 현재 프로세스의 메모리 공간을 새로운 프로그램으로 대체하는 데 사용됩니다.
- fork() 와 달리 child process에서는 parent process와 다른 동작을 하고 싶을때 사용한다.
- + fork() 는 동일한 프로세스의 내용을 여러 번 동작할 때 사용하기 때문이다.
exec는 현재 프로세스의 코드, 데이터, 스택을 새로운 프로그램의 코드와 데이터로 바꾸고, 새로운 프로그램을 실행합니다.
✔️ wait()
부모 프로세스(parent process)가 자식 프로세스(child process)의 종료를 대기 해야할 경우, 자식 프로세스가 종료될 때까지 기다리는 작업
parent process가 먼저 실행되더라도, wait()는 child process가 끝나기 전에는 return 하지 않으므로, 반드시 child가 먼저 실행됨.
"output is deterministic."
#출처
https://velog.io/@nnnyeong/OS-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%BD%9C-System-Call
'CS 지식 > 운영체제' 카테고리의 다른 글
[운영 체제] CPU Scheduling (1) | 2024.08.22 |
---|---|
[운영 체제] PCB & Context Switching (0) | 2024.08.21 |
[운영 체제] Interrupt(인터럽트)는 무엇인가 (0) | 2024.08.20 |
[운영 체제] 프로세스의 주소 공간 (0) | 2024.08.20 |
[운영 체제] 프로세스 vs 스레드 (0) | 2024.08.19 |