TIL

[TIL] 시스템 콜 System Call

아람2 2024. 10. 21. 13:48
반응형

시스템 콜 System Call 

대다수의 운영체제들은 커널 모드 Kernel Mode사용자 모드 User Mode 가 구분되어 있다

커널 모드는 커널 및 커널에 붙는 드라이버들이 작동되는 영역으로 모든 컴퓨터 리소스에 접근할 수 있고 

하나의 가상 메모리 영역만을 공유하여 커널과 드라이버가 서로 접근할 수 있다 

사용자 모드는 일반 프로그램들이 실행되는 영역으로 컴퓨터 리소스에 제한적으로만 접근할 수 있다 

각 프로그램은 독립된 메모리 공간을 사용하는 프로세스로 실행되며, 프로세스 간의 직접적인 메모리 접근은 불가능하다 

 

일반적인 프로그램들은 사용자 모드에서 실행되므로 커널 모드에 대해 직접적인 접근이 불가능하다 

하지만 읽기/ 쓰기, 메모리 할당, 프로세스 생성과 같은 거의 모든 시스템 작업은 커널 모드에서 처리해야 하기 때문에 

사용자 모드에서 실행 중인 프로그램은 시스템 콜 System 을 통해 커널에 요청을 보낸다 

커널은 요청을 처리한 후, 그 결과를 다시 사용자 모드의 프로그램으로 전달한다 

출처 https://fjvbn2003.tistory.com/306

 

시스템 콜은 다양한 기능에 따라 여러 종류로 나뉘며, 운영체제마다 다르지만, 각 시스템 콜에는 고유한 번호가 할당된다 

시스템 콜 인터페이스는 시스템 콜 번호와 시스템 콜 테이블 System Call Table 을 유지한다 

(System Call Table - 해당 시스템 콜을 처리하는 핸들러 함수의 주소로 구성, 시스템 콜의 번호에 따라 인덱스 되는 테이블)

사용자가 시스템 콜을 호출하면, 운영체제는 커널 모드에서 해당 시스템 콜 번호에 대응하는 함수 (핸들러) 를 테이블에서 찾아 실행한다 

이 과정에서, CPU는 트랩 Trap 이라는 소프트웨어 인터럽트를 통해 사용자 모드에서 커널 모드로 전환된다 

작업이 완료되면 커널은 다시 사용자 모드로 전환되며, 시스템 콜의 결과를 반환한다  

-> 시스템 콜 자체는 소프트웨어 요청에 의해 발생하지만, 트랩을 처리하고 모드 전환을 수행하는 주체는 하드웨어입니다 

open() 의 호출

 아래 그림은 open() 시스템 콜을 호출했을 때 운영체제에서 어떻게 처리되는지를 보여준다 

출처 https://dar0m.tistory.com/264

시스템 콜 예시

리눅스 터미널에 아래 명령어를 입력한다면 이 때 순차적으로 호출되는 시스템 콜은 어떤 것이 있을까?

cp in.txt out.txt

 

1) 사용자로부터 입력을 받는 I/O 시스템 콜 호출 

2) 'cp' 프로그램을 실행시키면, 먼저 'in.txt' 파일이 현재 디렉토리에서의 접근 여부를 확인하는 시스템 콜 호출 

 접근이 불가능하다면 에러를 발생시킨 후 프로그램이 종료되는데 이 때도 시스템 콜이 호출된다

3) 파일이 존재하고 접근이 가능하다면 복사한 파일을 저장하기 위해 'output.txt' 파일명이 있는지 검사하는 시스템 콜 호출 

 이 파일명의 존재 여부를 검사하기 위해 시스템 콜을 통해 확인한다

4) 파일명이 이미 존재한다면, 덮어 씌워야 할지, 이어서 붙여야 하는지 User 에게 물어볼 수 있고

 사용자에게 질문을 던지는 과정에서 입력을 받기 위한 I/O 시스템 콜이 호출된다 

5) 만약 저장하고자 하는 이름이 겹치지 않아 파일을 저장할 때도 시스템 콜을 이용한다 

출처: Operating System Concepts 10th - SILBERSCHARTZ P63

 

시스템 콜의 유형

시스템 콜은 여섯 가지의 중요한 범주로 나눌 수 있다 

1. 프로세스 제어 

2. 파일 조작

3. 장치 조작

4. 정보 유지 보수

5. 통신

6. 보호 

 

1. 프로세스 제어 Process Control 

- 끝내기 exit, 중지 abort

- 적재 load, 실행 execute 

- 프로세스 생성 create process - fork

- 프로세스 속성 획득과 설정 get process attribute and set process attribute 

- 시간 대기 wait time

- 사건 대기 wait event

- 사건을 알림 signal event

- 메모리 할당 및 해제 malloc, free

2. 파일 조작 File Mainipulation 

- 파일 생성 create file, 파일 삭제 delete file 

- 열기 open, 닫기 close

- 읽기 read, 쓰기 write, 위치 변경 reposition 

- 파일 속성 획독 및 설정 get file attribute and set file attribute 

3. 장치 관리 Device Management 

- 하드웨어의 제어와 상태 정보를 얻음 ioctl 

- 장치를 요구 request devices, 장치를 방출 relelase device 

- 읽기 read, 쓰기, write, 위치 변경 reposition 

- 장치 속성 획득 및 설정 get device attribute and set device attribute 

- 장치의 논리적 부착 attach 또는 분리 detach 

4. 정보 유지 Information Maintenance 

- getpid() 현재 프로세스의 프로세스 ID (PID) 반환

- alarm() 지정된 시간 (초) 후에 SIGALRM 신호를 프로세스에 전달 

- sleep() 지정된 시간 (초) 동안 프로세스 일시 중지 

- 시간과 날짜의 설정과 획득 time

- 시스템 데이터의 설정과 획득 date

- 프로세스 파일, 장치 속성의 획득 및 설정 

5. 통신 Communication 

- pipe() 프로세스 간에 데이터를 전송할 수 있는 FIFO 버퍼 생성 

- shm_open() 공유 메모리 객체를 생성하거나 열기 

- mmap() 파일 또는 장치의 내용을 메모리에 매핑하여, 프로세스가 파일을 직접 메모리처럼 접근할 수 있게 하는 기능 

- 통신 연결의 생성, 제거 

- 메시지의 송신, 수신

- 상태 정보 전달 

- 원격 장치의 부착 및 분리 

6. 보호 Protection 

- chmod() 파일이나 디렉토리의 접근 권한 변경 

- umask() 새로 생성되는 파일이나 디렉토리에 대한 기본 권한을 설정하는 마스크 값 

- chown() 파일이나 디렉토리의 소유자 변경 

 

반응형

'TIL' 카테고리의 다른 글

[TIL] 힙 정렬 Heap Sort  (0) 2024.10.22
[TIL] DMA, Direct Memory Access  (1) 2024.10.21
[TIL] 단편화 Fragmentation  (2) 2024.10.19
[TIL] 가상 메모리 Virtual Memory/ 페이징 Paging  (1) 2024.10.18
[TIL] RB Tree 구현하기 #2  (1) 2024.10.17