[CS] 운영체제의 역할과 구조

Janet·2023년 7월 31일
0

CS

목록 보기
6/17
post-custom-banner

운영체제의 역할과 구조


운영체제(OS, Operating System)란 사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스이다. 한정된 메모리나 시스템 자원을 효율적으로 분배하여 준다.

참고로 운영체제와 유사하지만 소프트웨어를 추가로 설치할 수 없는 것을 펌웨어(firmware)라고 한다.

1. 운영체제의 역할


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

2. 운영체제의 구조


유저 프로그램(응용 프로그램, 유틸리티)이 맨 위에 있고, 인터페이스(GUI), 시스템콜(시스템 호출), 커널, 드라이버, 가장 밑에는 하드웨어(CPU, 메모리, 모니터, 마우스, 하드디스크 등)가 있는 구조에서, 운영체제에 속하는 영역은 크게 사용자 영역과 커널 영역으로 나뉜다.

  • 사용자 영역: 애플리케이션을 이용하기 위하여 마련된 공간으로 인터페이스(GUI)가 해당된다.
  • 커널 영역: 사용자가 이용하는 하드웨어를 효율적이고 안전하게 사용하기 위해 마련된 공간으로 시스템 호출, 커널, 드라이버가 해당된다.

2-1. 사용자 영역

2-1-1. 인터페이스(GUI, Graphical User Interface)

  • 사용자가 전자장치와 상호 작용할 수 있도록 하는 사용자 인터페이스의 한 형태이다.
  • 그래픽을 이용하여 컴퓨터와 상호 작용하는 방식으로, 단순 명령어 창이 아닌 아이콘을 마우스로 클릭하는 단순한 동작으로 컴퓨터와 상호 작용할 수 있도록 해준다.
  • 참고로 GUI가 없고 CUI만 있는 리눅스 서버도 있다.
    • cf. CUI(Character User Interface): CLI(명령줄 인터페이스, Command Line Interface)라고도 불리며, 그래픽이 아닌 명령어로 처리하는 인터페이스를 말한다. (ex: Dos, 명령 프롬프트, Power Shell 등)

2-2. 커널 영역

2-2-1. 시스템 호출(System Call)

  • 시스템 호출이란 운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램(응용 프로그램, 유틸리티)이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 쓴다.

  • 시스템 호출은 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단하는 역할을 한다.

  • 유저 프로그램이 I/O 요청으로 트랩(trap)을 발동하면 올바른 I/O 요청인지 확인한 후 유저 모드가 시스템 호출을 통해 커널 모드로 변환되어 실행된다.

용어 해설

  • I/O 요청: 입출력 함수, 데이터베이스, 네트워크, 파일 접근 등에 관한 일
  • 트랩(trap): 소프트웨어 인터럽트라고도 부르며, 프로그램 내부에서 발생되는 인터럽트를 말한다. 인터럽트란, 어떤 신호가 들어왔을 때 인터럽트를 처리하기 위해 CPU를 잠깐 정지시키는 것을 말한다. 시스템 콜(사용자가 의도적으로 발생시킨 인터럽트) 또는 예외 상황(메모리 참조 오류, 0으로 나누기, 오버플로우 등 프로세스 오류로 발생되는 인터럽트)에서 발생한다.
  • 유저 모드: 유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드
  • 커널 모드: 모든 컴퓨터 자원에 접근할 수 있는 모드
  • ex) I/O 요청인 fs.readFile()이라는 파일 시스템의 파일을 읽는 함수가 발동한 경우

    • 유저 모드에서 파일을 읽지 않고 커널 모드로 들어가 파일을 읽는다.
    • 다시 유저 모드로 돌아가 그 뒤에 있는 유저 프로그램의 로직을 수행한다.
    • 이 과정을 통해 컴퓨터 자원에 대한 직접 접근을 차단할 수 있고 프로그램을 다른 프로그램으로부터 보호할 수 있다.
  • 프로세스나 스레드에서 운영체제로 어떠한 요청을 할 때 시스템콜 인터페이스와 커널을 거쳐 운영체제에 전달된다.

  • 시스템 호출은 하나의 추상화 계층이다. 때문에 이를 통해 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역 처리에 대한 부분을 많이 신경 쓰지 않고 프로그램을 구현할 수 있다는 장점이 있다.

2-2-2. 커널(Kernel)

커널은 운영체제의 핵심이 되는 컴퓨터 프로그램으로, 하드웨어와 응용 프로그램 사이에서 인터페이스를 제공하는 역할을 하며 컴퓨터 자원들을 관리하는 역할을 한다.

  • 커널의 역할
    • 보안: 커널은 컴퓨터 하드웨어와 프로세스의 보안을 책임진다.
    • 자원 관리: 한정된 시스템 자원을 효율적으로 관리하여 프로그램의 실행을 원활하게 한다. 특히 프로세스에 처리기를 할당하는 것을 스케쥴링이라 한다.
      • 프로세스 관리: 프로세스에 CPU 배분
      • 메모리 관리: 프로세스에 작업 공간을 배치
      • 파일 시스템 관리, 입출력 관리, 프로세스 간 통신 관리
    • 추상화: 같은 종류의 부품에 대해 다양한 하드웨어를 설계할 수 있기 때문에 하드웨어에 직접 접근하는 것은 문제를 매우 복잡하게 만들 수 있다. 일반적으로 커널은 운영 체제의 복잡한 내부를 감추고 깔끔하고 일관성 있는 인터페이스를 하드웨어에 제공하기 위해 몇 가지 하드웨어 추상화(같은 종류의 장비에 대한 공통 명령어의 집합)들을 구현한다. 이 하드웨어 추상화는 프로그래머가 여러 장비에서 작동하는 프로그램을 개발하는 것을 돕는다. 하드웨어 추상화 계층(HAL)은 제조사의 장비 규격에 대한 특정한 명령어를 제공하는 소프트웨어 드라이버에 의지한다.
  • 커널의 종류
    • 단일형 커널(monolithic kernel): 커널의 다양한 서비스 및 높은 수준의 하드웨어 추상화를 하나의 덩어리(주소 공간)로 묶은 것이다. 운영 체제 개발자 입장에서 유지 보수가 일반적으로 더 어려우나 성능이 좋다.
    • 마이크로커널(microkernel): 하드웨어 추상화에 대한 간결한 작은 집합을 제공하고 더 많은 기능은 서버라고 불리는 응용 소프트웨어를 통해 제공한다.
    • 혼합형 커널(hybrid kernel): 성능 향상을 위해 추가적인 코드를 커널 공간에 넣은 점을 제외하면 많은 부분은 순수 마이크로커널과 비슷하다. 수정 마이크로커널이라고도 한다.
    • 나노커널(nanokernel): 실질적으로 모든 서비스를 책임진다.
    • 엑소커널(exokernel): 낮은 수준의 하드웨어 접근을 위한 최소한의 추상화를 제공한다. 전형적으로 엑소커널 시스템에서는 커널이 아닌 라이브러리가 단일형 커널 수준의 추상을 제공한다.

cf. modebit

  • 시스템콜이 작동될 때 modebit을 참고하여 유저 모드와 커널 모드를 구분한다.
  • modebit은 1 또는 0의 값을 가지는 플래그 변수이다. (modebit의 0은 커널 모드, 1은 유저 모드이다.)
  • I/O 디바이스는 운영체제를 통해서만 작동해야 한다. 만약 유저 모드를 기반으로 I/O 디바이스가 작동된다면, 사용자가 의도하지 않았는데 공격자가 디바이스를 컨트롤하는 등의 문제가 발생할 수 있다. (물론 커널 모드를 거쳐 운영체제를 통해 작동한다고 해도 완전히 막을 수는 없지만 운영체제를 통해 작동하게 해야 막기 쉽다) 이를 위한 장치가 modebit이다.
  • modebit의 동작 과정
    • 유저 프로그램(응용 프로그램)이 I/O 디바이스를 이용하려고 한다.
    • 시스템콜 호출
    • modebit 1에서 0으로 변경(커널 모드로 전환)
    • 커널 모드에서 I/O 디바이스 자원을 이용한 로직 수행
    • 수행이 끝나면 modebit 0에서 1로 변경(유저 모드로 전환)
    • 유저 모드에서 이후 로직 실행

2-2-3. 드라이버(Driver)

  • 드라이버는 주변기기의 입출력을 통제하는 등 하드웨어를 제어하기 위한 소프트웨어를 말한다.
profile
😸
post-custom-banner

2개의 댓글

comment-user-thumbnail
2023년 7월 31일

이런 유용한 정보를 나눠주셔서 감사합니다.

1개의 답글