System Call (+ OS, Kernel)

2024. 5. 1. 19:55크래프톤 정글 5기/공부

OS (Operating system)

 

Hardware - OS - Process

 

Definition :

 

- 컴퓨터 하드웨어와 사용자 사이의 인터페이스

- 시스템 자원을 효율적으로 관리하여 응용 프로그램이 동작할 수 있게 하는 소프트웨어

 

Main Function :

1. 자원 관리
   CPU, Memory, Disk, 입출력 장치와 같은 시스템 자원 관리
   다수의 프로그램 동시간대 진행, 각각의 프로그램 동작에 필요한 자원을 할당 및 해제하며 효율성을 높인다
   
2. 프로세스 관리
   프로세스 생성 / 실행 / 정지 / 중단 / 스케줄링 등의 작업 관리
   다수의 프로세스가 동시간대에 진행되도록 하고, 각 프로세스에 자원을 할당 및 해제하며 효율성을 높인다
   
3. 파일 시스템 관리
   파일과 디렉터리 생성 / 읽기 / 쓰기 / 삭제 등의 파일 관리 작업 수행
   데이터를 저장하고 관리하는 데 필요한 기능 제공
   
4. 입출력 관리
   입출력 장치와의 효율적인 데이터 교환 관리
   (Disk, Network, Hardward, …)
   
5. 사용자 인터페이스 제공
   사용자와 시스템 간의 상호 작용을 가능케 하는 인터페이스 제공

 


Kernel

 

Hardware -OS -Kernel

 

Definition :

 

- OS의 핵심적인 기능(프로세스 관리, 메모리 관리, 저장장치 관리 등)이 모인 소프트웨어 구성 요소

- 시스템 부팅과 함께 운영체제가 동작하며, 커널은 항상 메모리에 상주한다

 

Main Function :

시스템 자원 관리 CPU, Memory, Disk, Network 등의 시스템 자원 관리
프로세스 관리 프로세스의 생성, 스케줄링, 동기화, 통신 담당
메모리 관리 프로세스가 메모리에 할당되고 해제될 수 있게 함
가상 메모리를 통해 메모리의 효율적인 활용 지원 / 페이지 교체 기능 등 제공
입출력 관리 입출력 장치와의 통신을 관리하여 데이터 읽기/쓰기
시스템 - 사용자 간 상호 작용 지원
파일 시스템 관리 파일과 디렉토리의 생성/읽기/쓰기/삭제 등의 파일 시스템 작업 수행

 

- OS, Kernel 모두 소프트웨어니까 메모리에 올라가야 하는데 ?

OS는 메모리에 모두 적재되기에는 너무 큰 사이즈
-> OS의 필수적인 기능만 메모리에 항상 상주시킨다
--> 메모리에 상주하는 OS의 일부 == Kernel

 


CPU Mode 

 

User Mode <-> Kernel Mode

 

Definition :

 

- 응용 프로그램이 시스템을 손상시키는 것을 방지하기 위해 2가지 모드 제공

- Mode bit로 모드를 구분 (0 == Kernel Mode / 1 == User Mode) (레지스터에 해당 비트 저장)


 

1) User Mode :

 

- 응용 프로그램이 CPU를 사용하는 모드

- 해당 모드에서는 하드웨어 장치에 접근할 수 없다

 

2) Kernel Mode :

 

- OS가 CPU를 사용하는 모드

- 시스템 콜, API 호출을 통해 Kernel Mode로 전환이 가능

- Kernel Mode로 전환 이후, OS는 하드웨어를 제어하는 Privileged Instructions 실행

- 해당 Instruction은 User Mode에서 사용되는 exception 발생

- Kernel Mode에서 프로그램 충돌 발생 시, 전체 시스템이 충돌 또는 정지

 

User Mode <-> Kernel Mode

 

- User Mode에서 System Call 호출 → Kernel Mode 진입 및 동작 → 다시 User Mode로 전환

 


System Call (=syscall)

 

Hardware - OS - Kernel

 

Definition :

 

- OS가 제공하는 기능에 대해, 응용 프로그램의 요청에 따라 해당 기능을 사용하기 위한 인터페이스

- Kernel Mode로 진입하여, OS 기능을 사용할 수 있게 한다

 

 

Main Function :

 

1. 프로세스 제어 (Process Control):
   fork(): 새로운 프로세스를 생성 / 부모 프로세스와 자식 프로세스가 동일한 프로그램을 실행, 부모 프로세스의 상태를 자식 프로세스가 복사
   exec(): 새로운 프로그램을 실행 / 현재 프로세스의 주소 공간을 새로운 프로그램으로 교체
   wait(): 자식 프로세스의 종료 대기 / 자식 프로세스가 종료되면 그에 대한 정보를 반환
   exit(): 현재 프로세스를 종료

2. 파일 조작 (File Manipulation):
   open(): 파일을 열고, 파일 디스크립터를 반환
   close(): 파일 디스크립터로 지정된 파일을 닫음
   read(): 파일에서 데이터를 읽음
   write(): 파일에 데이터를 작성
   seek(): 파일 내에서 특정 위치로 이동

3. 디바이스 조작 (Device Manipulation):
   ioctl(): 특정 장치에 대한 제어 명령을 수행
   read(), write(): 장치로부터 데이터를 읽거나 데이터를 기록

4. 정보 유지 (Information Maintenance):
   getpid(): 현재 프로세스의 ID를 반환
   getuid(), getgid(): 현재 사용자 ID와 그룹 ID를 반환
   time(): 현재 시간을 반환

5. 통신 (Communication):
   socket(), bind(), listen(), accept(), connect(): 네트워크 통신을 위한 소켓을 생성 및 설정
   send(), recv(): 데이터를 송수신

6. 보호 (Protection):
   chmod(), chown(): 파일의 권한을 변경
   umask(): 파일 생성 시의 기본 권한을 설정
   setuid(), setgid(): 프로세스의 실행 권한을 변경

 


 * 일반적으로 직접적인 시스템 콜 호출이 아닌, API(라이브러리 함수)를 통해 Kernel Mode에 진입함

 

API -> system call 호출

 

#include <stdio.h>
int main()
{
    printf ("Hello World!");
    return 0;
}
—> printf 함수는 stdio 라이브러리 호출 [User mode]

—> stdio 라이브러리는 syscall인 write() 호출 [User mode → Kernel mode]

—> 모니터에 문자열 출력 이후 printf 다음 단계로 이동 [Kernel mode → User mode]

 

System Call :

- 커널의 기능을 사용자가 사용할 수 있게 만든 함수
- 호출 시 커널 모드로 전환되어 실행
- 오류 발생 시 -1 리턴 / 정상은 0 이상의 값 리턴

Library Function :

- 사용자가 많이 사용하는 (커널의) 기능을 미리 함수로 만들어 놓은 것
- 내부적으로 시스템 콜을 사용하지만 호출 시 사용자 모드에서 실행

 

API -> system call 호출 및 동작 과정

 

# printf() -> write() 과정

1. 라이브러리 함수 (printf) 호출

2. 라이브러리 함수 내에서 시스템 콜(write) 호출

3. 시스템 콜마다 다른 고유 인덱스(write = 4)를 레지스터에 저장한다

4. 0x80 인터럽트를 발생시킨다 (커널 모드로 전환)

5. IDT(Interrupt Descriptor Table)을 참조하여 system_call()을 호출한다

6. 이때 레지스터에 저장된 인덱스 4를 system_call() 함수 내에 전달한다

7. sys_call_table을 참조해 해당 인덱스에 맞는 기능(sys_write)을 호출한다.

8. 동작 완료 이후 사용자 모드로 전환한다.

 

 


Reference

 

https://codybuilder.com/41

 

[OS] 시스템 콜(System Call)

⬛ CPU 모드 CPU는 사용자 애플리케이션(User Application)이 시스템을 손상시키는 것을 방지하기 위해 2가지 모드를 제공한다. CPU에 있는 Mode bit로 모드를 구분하며 0은 커널 모드(운영체제 프로세스

codybuilder.com

https://didu-story.tistory.com/311

 

[Operating System] (iOS) System Call (시스템콜, 시스템 호출이란?)

스터디를 운영하고 있습니다. 해당 repository에 가면 더 많은 정보를 보실 수 있습니다! 특히 close 된 PR을 보시면, 어떤 부분에 대해서 고민하고 스터디원들과 이야기나눴는지 보실 수 있습니다 htt

didu-story.tistory.com

https://math-coding.tistory.com/80

 

[Operating System] 운영체제의 구조

이 글은 '쉽게 배우는 운영체제' 책을 토대로 작성하였습니다 커널과 인터페이스 커널 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 모아놓은 것으로, 자동차

math-coding.tistory.com

https://goodmilktea.tistory.com/23

 

1. 운영체제와 커널이란?

운영체제란? 운영체제는 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 사용자가 컴퓨터를 편리하고, 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임입니다. 운영체제

goodmilktea.tistory.com

 

'크래프톤 정글 5기 > 공부' 카테고리의 다른 글

[Webproxy-lab] Tiny Web Server  (0) 2024.05.06
[Webproxy-lab] Echo server communication  (0) 2024.05.04
Malloc-lab (realloc 개선)  (0) 2024.04.30
Heap Sort  (0) 2024.04.29
Malloc Lab  (0) 2024.04.28