# 운영체제의 역할과 구조

# 운영체제란?

운영체제 (OS, Operating System)

하드웨어를 관리하고, 컴퓨터 시스템의 자원들을 효율적으로 관리하며, 응용 프로그램과 하드웨어 간의 인터페이스로써 다른 응용 프로그램이 유용한 작업을 할 수 있도록 환경을 제공합니다.

운영 체제는 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 시스템 소프트웨어라고 할 수 있습니다.

# 운영체제의 목적

  • 처리능력(Throughput) : 일정 시간 내에 시스템이 처리하는 일의 양
  • 반환시간(Turn Around Time) : 시스템에 작업을 의뢰한 시간부터 처리가 완료될 떄까지 걸린 시간
  • 사용가능도(Availability) : 시스템을 사용할 필요가 있을 때 즉시 사용 가능한 정도
  • 신뢰도(Reliabilty) : 시스템이 주어진 문제를 정확하게 해결하는 정도

# 운영체제의 역할

  1. CPU 스케줄링과 프로세스 관리
    1. 스케줄링 : CPU의 소유권을 어떤 프로세스에 할당할지 관리합니다.
    2. 프로세스와 쓰레드의 생성과 삭제를 관리합니다.
    3. 자원 할당 및 반환을 관리합니다.
  2. 메모리 관리
    1. 한정된 메모리를 어떤 프로세스에 얼만큼 할당해야 하는지 관리합니다.
  3. 디스크 파일 관리
    1. 디스크 파일을 어떤 방법으로 보관할지 관리합니다.
  4. I/O 디바이스 관리
    1. I/O 장치(마우스, 키보드)와 컴퓨터 간에 데이터를 주고 받는 것을 관리합니다.

# 운영체제의 기능

  1. 프로세서, 기억장치, 입출력장치, 파일 및 정보 등의 자원을 관리합니다.
  2. 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능을 제공합니다.
  3. 사용자와 시스템간의 편리한 인터페이스를 제공합니다.
  4. 시스템의 각종 하드웨어와 네트워크를 관리, 제어합니다.
  5. 데이터를 관리하고, 데이터 및 자원의 공유 기능을 제공합니다.
  6. 시스템의 오류를 검사하고 복구합니다.
  7. 자원 보호 기능을 제공합니다.
  8. 입 출력에 대한 보조 기능을 제공합니다.
  9. 가상 계산기 능력을 제공합니다.

# 운영체제의 구조

image

  • 유저 프로그램이 맨 위에 있고 그 다음으로 GUI, 시스템콜, 커널, 드라이버가 있으며, 가장 밑에 하드웨어가 있는 구조입니다.
  • GUI, 시스템콜, 커널, 드라이버 부분이 운영체제입니다.

용어

GUI

사용자가 전자장치와 상호작용할 수 있도록 하는 사용자 인터페이스의 한 형태, 단순 명령어 창이 아닌 아이콘을 마우스로 클릭하는 단순한 동작으로 컴퓨터와 상호작용할 수 있도록 합니다.

드라이버

커널과 하드웨어의 인터페이스를 담당합니다. 커널이 제공하는 드라이버도 있고, 하드웨어 제작자가 제공하는 드라이버도 있으며, 연결 및 제동이 드라이버를 통해 이루어집니다.

# CPU 모드

CPU는 사용자 애플리케이션(User Application)이 시스템을 손상시키는 것을 방지하기 위해 2가지 모드를 제공합니다.

# 사용자 모드(User Mode)

  • 사용자 모드에서 사용자 애플리케이션 코드가 실행됩니다.
  • 사용자가 접근할 수 있는 영역에 제한이 있기 때문에 해당 모드에서는 하드웨어(디스크, I/O 등)에 직접적으로 접근할 수 없습니다.
  • 접근을 위해서는 시스템 콜(System Call)을 사용해야 한다. 사용자 애플리케이션의 각 스레드들은 고유의 사용자 모드 스택을 가집니다.

# 커널 모드(Kernel Mode)

  • 운영체제(OS)가 CPU를 사용하는 모드입니다.
  • 시스템콜을 통해 커널모드로 전환이 되면 운영체제는 하드웨어를 제어하는 명령어(Privileged Instructions)를 실행합니다.
  • Privileged Instructions은 사용자 모드에서 실행되면 exception이 발생한다.

# modebit

image

  • 시스템콜이 동작할 때 modebit을 참고해서 유저모드와 커널모드를 구분합니다.
  • modebit은 1 또는 0의 값을 가지는 플래그 변수입니다.
  • 커널 모드를 거쳐 운영체제를 통해 동작한다고 해도, 100%로의 악의적 사용을 막을 수 없지만, 운영체제를 통해 작동하게 해야 막기가 수월합니다.
  • 0은 커널 모드, 1은 유저 모드입니다.

# 시스템 콜

시스템 콜(System Call)

시스템콜이란 운영체제가 커널에 접근하기 위한 인터페이스이며, 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 사용합니다.

image

  • 유저 프로그램이 I/O 요청으로 트랩(trap)을 발생시키면 올바른 I/O 요청인지 확인한 후 유저 모드가 시스템콜을 통해 커널 모드로 변환되어 실행됩니다.
  • 이때 유저 모드에서 파일을 읽지 않고 커널 모드로 들어가 파일을 읽고 다시 유저 모드로 돌아가 그 뒤에 있는 유저 프로그램의 로직을 수행합니다.

이 과정을 통해 컴퓨터 자원에 대한 직접 접근을 차단할 수 있고 프로그램을 다른 프로그램으로부터 보호 할 수 있습니다.

용어

I/O 요청

입출력 함수, 데이터베이스, 네트워크, 파일 접근 등에 관한 일

드라이버

하드웨어를 제어하기 위한 소프트웨어

동작 흐름

메모리(프로세스, 스레드) -> 시스템콜 -> 커널 -> OS

  • 프로세스나 스레드에서 운영체제로 요청을 할 때 시스템 콜과 커널을 거쳐 전달됩니다.
  • 시스템콜은 하나의 추상화 계층이며, 네트워크 통신이나, 데이터베이스와 같은 낮은 단계의 영역처리에 대한 부분을 신경쓰지 않고, 프로그램을 만들 수 있다는 장접이 있습니다.

# 시스템 콜의 종류

  1. 프로세스 제어(Process Control)
    • 프로세스 생성/제거
    • 끝내기, 중지
    • 적재, 실행
    • 대기
    • 메모리 할당/해제
  2. 파일 조작(File Manipulation)
    • 파일 생성/삭제
    • 열기/닫기/읽기/쓰기
  3. 디바이스 조작(Device Manipulation)
    • 장치 요청/해제
    • 장치 읽기/쓰기/위치 변경
    • 속성 설정
  4. 디바이스 조작(Device Manipulation)
    • 장치 요청/해제
    • 장치 읽기/쓰기/위치 변경
    • 속성 설정
  5. 정보 유지(Information Maintenance)
    • 시간, 날짜 설정/요청
  6. 보호(Protection)
    • 권한 관리

# 시스템 콜 실행 과정

image

  1. 라이브러리 함수(printf)를 호출한다.
  2. 라이브러리 함수 내부에서 시스템 콜(write)를 호출한다.
  3. 해당 시스템 콜의 인덱스(4)를 CPU 레지스터에 저장한다.
  4. 0x80 인터럽트를 발생시킨다.(커널 모드로 전환)
  5. IDT(Interrupt Descriptor Table)를 참조하여 system_call()을 호출한다.
  6. 이때 3에서 저장한 인덱스를 system_call() 함수 내에 전달한다.
  7. sys_call_table을 참조해 해당 인덱스에 맞는 기능(sys_write)을 호출한다.
  8. 수행이 모두 끝나면 사용자 모드로 전환된다.

# 커널 (Kernel)

정의

운영체제의 핵심 부분이자 시스템 콜 인터페이스를 제공하며 보안, 메모리, 프로세스, 파일 시스템, I/O 디바이스, I/O 요청 관리 등 운영체제의 중추적인 역할을 수행합니다.

  • 운영체제는 규모가 매우 큰 프로그램이므로, 운영체제의 모든 부분을 메모리에 올려놓는 것은 메모리의 측면으로 봤을 때 굉장히 비효율적입니다.
  • 운영체제는 필요한 부분만을 메모리에 올려서 사용하게 되는데, 이 때 메모리에 상주하는 운영체제의 핵심 부분을 커널이라고 합니다.
  • 커널은 메모리에 상주하는 부분이므로, 운영체제의 핵심 부분이라고 볼 수 있기 때문에, 주로 '운영체제 = 커널'이라고 말합니다.

# 쉘 (Shell)

정의

운영체제가 사용자를 위해 제공하는 인터페이스

  • 사용자가 운영체제의 기능을 조작할 수 있도록 인터페이스를 제공하는 일종의 응용 프로그램입니다.
  • CLI 환경과 GUI 환경 두 종류로 분류됩니다.

# 참고자료