[CS] 운영체제

Operating System(OS)

- 컴퓨터 하드웨어와 소프트웨어 사이의 인터페이스 역할을 하는 핵심 소프트웨어

- 컴퓨터의 자원을 효율적으로 관리하고, 사용자가 컴퓨터를 쉽게 사용할 수 있도록 도와줌

    ⇒ 하드웨어와 사용자 간의 중재자 역할을 수행

- OS는 스스로 어떠한 기능을 수행하기 보다 다른 응용프로그램이 작업을 원활히 진행할 수 있도록 작업환경을 마련해 줌.

   ⇒ 응용프로그램을 운영(Operating)하기 쉽도록 만든 시스템(System)

- 종류 : Windows, Linux, UNIX, MS-DOS

 

역할

- CPU 스케줄링과 프로세스 관리

   CPU 소유권을 어떤 프로세스에 할당할지, 프로세스의 생성과 삭제, 자원 할당 및 반환을 관리

- 메모리 관리

   한정된 메모리를 어떤 프로세스에 얼만큼 할당해야 하는지 관리

- 디스크 파일 관리

   디스크 파일을 어떠한 방법으로 보관할지 관리

- I/O 디바이스 관리

   I/O 디바이스(입출력 장치 : 마우스, 키보드 등)와 컴퓨터 간에 데이터를 주고받는 것을 관리

 

구조

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

  1. 사용자 영역
    1. 인터페이스(GUI, Graphical User Interface)
      1. 사용자가 전자장치와 상호작용할 수 있도록 하는 사용자 인터페이스의 한 형태
      2. 그래픽을 이용하여 컴퓨터와 상호 작용하는 방식으로, 단순 명령어 창이 아닌 아이콘을 마우스로 클릭하는 단순한 동작으로 컴퓨터와 상호 작용할 수 있도록 해줌
      3. GUI가 없고 CUI만 있는 리눅스 서버도 있음
        📌 CUI(Character User Interface) : CLI(Command Line Interface, 명령줄 인터페이스)라고 불리며, 그래픽이 아닌 명령어로 처리하는 인터페이스를 말함. (ex. Dos, 명령 프롬프트, Power Shell 등)
  1. 커널 영역
    1. 시스템 호출(System Call)
      1. 시스템 호출이란 운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램(응용 프로그램, 유틸리티)이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 씀
      2. 시스템 호출은 사용자나 응용 프로그램으로부터 컴퓨터 자원을 보호하기 위해 자원에 직접 접근하는 것을 차단하는 역할을 함
      3. 유저 프로그램이 I/O 요청으로 트랩(trap)이 발동하면 올바른 I/O요청인지 확인한 후 유저 모드가 시스템 호출을 통해 커널 모드로 변환되어 실행됨
      4. 프로세스나 스레드에서 운영체제로 어떠한 요청을 할 때 시스템콜 인터페이스와 커널을 거쳐 운영체제에 전달됨
      5. 시스템 호출은 하나의 추상화 계층임. 때문에 이를 통해 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역 처리에 대한 부분을 많이 신경쓰지않고 프로그램을 구현할 수 있다는 장점이 있음
       📌 용어
        -   I/O 요청 : 입출력 함수, 데이터베이스, 네트워크, 파일 접근 등에 관한 일
        -   유저 모드 : 유저가 접근할 수 있는 영역을 제한적으로 두며 컴퓨터 자원에 함부로 침범하지 못하는 모드
        -   커널 모드 : 모든 컴퓨터 자원에 접근할 수 있는 모드

Ex) I/O 요청인 fs.readFile()이라는 파일 시스템의 파일을 읽는 함수가 발동한 경우

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

'CS > OS' 카테고리의 다른 글

[CS] PCB & Context Switching  (0) 2024.02.01
[CS] 시스템 콜(System Call)  (0) 2024.02.01
[CS] 인터럽트 (Interrupt)  (0) 2023.11.29
[CS] 프로세스 주소 공간  (0) 2023.10.28
[CS] 프로세스와 스레드  (1) 2023.10.28