본문 바로가기

운영체제와 시스템 콜 본문

Dev

운영체제와 시스템 콜

겨울바람_ 2024. 3. 23. 23:34

운영체제란?

운영체제는 컴퓨터의 자원들을 효율적으로 관리하며 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하며, 이를 위해 사용자와 하드웨어 간의 인터페이스로서 동작한다.

운영체제는 응용 프로그램이 실행될 때 필요한 자원을 할당하고, 다른 응용 프로그램이 원활하게 실행될 수 있는 환경을 제공한다. 운영체제 또한 프로그램이기 때문에 메모리에 적재되어야 한다.

 

다만, 운영체제는 다른 프로그램들이 원활하게 실행될 수 있도록 돕는 특별한 프로그램이기 때문에 컴퓨터가 부팅될 때 메모리 내부의 커널 영역에 적재된다.

 

참고로 커널 영역을 제외한 다른 프로그램들이 적재되는 메모리 공간을 사용자 영역이라고 한다.

CPU 모드

CPU는 사용자 애플리케이션이 시스템을 손상시키는 것을 방지하기 위해 사용자 모드와 커널 모드를 구분하여 제공한다. 보통 운영체제에서 프로그램이 구동되는데 있어서 파일을 읽어오거나, 쓰거나 혹은 화면에 무언가를 출력하는 등 많은 부분이 커널 모드를 사용한다.

 

이렇게 각 용도에 맞게 두 가지로 나뉘어 동작하는 것을 이중 동작 모드라고 한다. 이 이중 동작 모드는 사용자 모드에서 사용자 애플리케이션의 필요에 따라 커널 모드로 변환하여 시스템 영역에 접근할 수 있도록 한다.

 

이중 동작 모드를 사용하는 것으로 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호할 수 있다. 만약 으용 프로그램이 하드웨어에 마음대로 접근하고 조작할 수 있다면 자원이 무질서하게 관리될 것이고, 응용 프로그램의 잘못된 동작이 컴퓨터 전체에 악영향을 끼칠 수 있다.

 

그렇기 때문에 운영체제는 응용 프로그램들이 자원에 접근하려고 할 때 오직 운영체제만을 통해서만 접근하도록 하여 자원을 보호한다.

사용자 모드

사용자 모드는 사용자 애플리케이션의 코드가 실행된다. 사용자가 접근할 수 있는 영역에 제한이 있기 때문에 사용자 모드에서는 하드웨어에 접근할 수 없다.

커널 모드

운영체제가 CPU를 사용하기 위해서는 커널 모드로 전환되어야 한다. 커널 모드로 전환되면 하드웨어를 제어하는 명령어(Privileged Instructions)를 실행한다. 다만, 운영체제가 커널 모드로 전환되기 위해서는 시스템 콜이 발생해야 한다.

시스템 콜

사용자 모드로 실행되는 프로그램은 시스템 콜을 통해 커널 모드로 전환하여 운영체제 서비스를 제공 받을 수 있다. 시스템 콜은 일종의 소포트웨어적인 인터럽트로 인터럽트를 발생시키는 특정 명령어에 의해 발생하거나, 입출력장치에 의해 발생하기도 한다.

 

CPU가 소프트웨어 인터럽트를 처리하는 방법 또한 인터럽트 처리 순서와 유사하다. 시스템 콜을 발생시키는 명령어가 실행되면 CPU는 지금까지의 작업을 백업하고, 커널 영역에 내에 시스템 콜을 수행하는 코드를 실행한 뒤 다시 기존에 실행하던 응용 프로그램을 복귀하여 실행을 계속한다.

 

시스템 콜의 종류로는 크게 6가지가 존재한다.

1. 프로세스 제어

프로세스의 실행, 생성, 대기 등과 관련이 있는 시스템 콜이다.

 

끝내기 (exit), 중지 (abort)

적재 (load), 실행 (execute)

프로세스 생성 (fork)

시간 대기 (wait time)

사건 대기 (wait event)

사건을 알림 (signal event)

메모리 할당 및 해제

2. 파일 조작

파일을 열거나 읽고, 쓸 때와 관련이 있는 시스템 콜이다.

 

파일 생성 (create), 파일 삭제 (delete)

열기 (open), 닫기 (close), 읽기 (read), 쓰기 (write)

파일 위치 변경 (reposition)

파일 속성 획득 및 설정 (get file attribute, set file attribute)

3. 장치 관리

디바이스 부착, 분리, 읽기와 쓰기에 관련이 있는 시스템 콜이다.

 

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

장치를 요구 (request device), 장치를 방출 (release device)

읽기 (read), 쓰기 (write), 위치 변경 (reposition)

장치 속성 획득 및 설정 (get device attribute, set device attribute)

장치의 논리적 부착 및 분리

4. 정보 유지

시간 및 날짜 설정과 관련이 있는 시스템 콜이다.

 

getpid(), alarm(), sleep()

시간과 날짜의 설정과 획득 (time)

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

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

5. 통신

통신 연결 생성 및 제거, 상태 정보 전달 등과 관련이 있는 시스템 콜이다.

 

pipe(), shm_open(), mmap()

통신 연결의 생성, 제거

메세지의 송신, 수신

상태 정보 전달

원격 장치의 부착 및 분리

6. 보호

chmod()

umask()

chown()

 

 

'Dev' 카테고리의 다른 글

RabbitMQ  (0) 2024.03.31
Redis를 사용한 분산락  (0) 2024.03.24
Thread Safe 와 동시성 제어  (0) 2024.03.17
MySQL의 인덱스  (1) 2024.03.16
3/4-way Handshake 란?  (0) 2024.02.25
Comments