[운영체제] 혼공컴운: #9. 운영체제 시작하기

bien·2024년 5월 19일
0

운영체제

목록 보기
3/4

1. 운영체제를 알아야 하는 이유

운영체제란

  • 운영체제 (operation system)
    • 실행할 프로그램에 필요한 자원을 할당 + 프로그램이 올바로 실행되도록 도움
      • 자원: 컴퓨터 부품 (CPU, 메모리, 보조기억장치, 입출력장치 등)
    • 항상 컴퓨터가 부팅될 때 메모리 내 커널 영역(kernel space)에 따로 적재되어 실행된다.

운영체제를 알아야 하는 이유

  • 운영체제가 없다면 하드웨어를 조작하는 코드를 모두 개발자가 직접 작성해야 한다.
  • 개발자가 만든 프로그램은 결국 하드웨어가 실행하고, 그 하드웨어를 조작하는 프로그램운영체제이다.
    • 따라서, 운영체제를 통해 문제 해결의 실마리를 찾을 수 있다.

2. 운영체제의 큰 그림

운영체제의 심장, 커널

  • 커널
    • 운영체제가 응용 프로그램에게 제공하는 서비스 중, 핵심적인 서비스를 담당하는 부분
    • 운영체제가 설치된 모든 기기에는 커널이 있다.
  • 사용자 인터페이스
    • 운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스 중 하나
    • ex) 윈도우 바탕화면
      1. 그래픽 유저 인터페이스(GUI: Graphical User Interface): 윈도우 바탕화면, 스마트폰 화면
      2. 커맨드 라인 인터페이스(CLI: Command Line Interface): 명령어 기반 컴퓨터와 상호작용

이중 모드와 시스템 호출

  • 운영체제응용 프로그램의 자원 접근을 대행하는 일종의 문지기 역할을 수행한다.
    • 운영체제는 사용자가 실행하는 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여, 자원을 보호한다.
    • 응용 프로그램이 자원에 접근하기 위해서는 운영체제에 도움을 요청해야 한다.
      • 운영체제에 도움을 요청한다 = 운영체제 코드를 실행하려고 한다.
  • 이와 같은 운영체제의 문지기 역할은 이중 모드(dual mode)를 통해 구현된다.

이중 모드: dual mode

  • CPU가 명령어를 실행하는 방식을 사용자 모드커널 모드로 구분하는 방식
  • CPU는 명령어를 사용자 모드로써 실행할 수 있고, 커널 모드로써 사용할 수 있다.
  • 사용자 모드(user mode)
    • 운영체제 서비스를 제공받을 수 없는 실행 모드
      • 커널 영역의 코드를 실행할 수 없는 모드
    • 일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행된다.
    • 사용자 모드로 실행 중인 CPU는 하드웨어 자원에 접근하는 명령어를 실행할 수 없다.
      • 따라서, 사용자 모드로 실행되는 일반적인 응용 프로그램은 자원에 접근할 수 없다.
  • 커널 모드(kernel mode)
    • 운영체제 서비스를 제공받을 수 있는 실행 모드 = 커널 영역의 코드를 실행할 수 있는 모드.
    • CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있다.
      • 운영체제는 커널 모드로 실행되기 때문에 자원에 접근할 수 있다.

시스템 호출(시스템 콜): System call

  • 사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야 한다.
    • 이때, 운영체제 서비스를 제공받기 위한 요청을시스템 호출(system call)이라고 한다.
    • 사용자 모드로 실행되는 프로그램은 시스템 호출을 통해 커널 모드로 전환하여 운영체제 서비스를 제공받을 수 있다.
      • 운영체제에게 "나 소프트웨어 프로그램 사용하고 싶어!"하고 부탁을 하는 것.
  • 시스템 호출은 일종의 인터럽트이다. (정확히는 소프트웨어적인 인터럽트)
    • 인터럽트는 입출력 장치에 의해 발생하기도 하지만 인터렙트를 발생시키는 특정 명령어에 의해 발생하기도 하는데, 이를 소프트웨어 인터럽트라고 한다.
    • 시스템 호출이 실행되는 방식은 하드웨어 인터럽트 처리 방식과 유사하다.
      1. 하드 디스크에 데이터를 저장하는 시스템 호출 발생시켜 커널모드로 전환
      2. 운영체제 내의 하드 디스크에 데이터를 저장하는 코드 실행
      3. 하드디스크에 접근이 끝났다면 다시 사용자 모드로 복귀하여 실행 재개
  • 일반적으로 응용 프로그램은 실행 과정에서 운영체제 서비스들을 매우 빈번하게 사용한다.
    • 그 과정에서 빈번하게 시스템 호출을 발생시키고, 사용자 모드와 커널 모드를 오가며 실행된다.

운영체제의 핵심 서비스

이 책에서 다루는 운영체제의 핵심 서비스는 아래의 3개이다.

1. 프로세스 관리

  • 프로세스(process): 실행중인 프로그램
    • 윈도우의 [작업관리자]를 열어 [프로세스] 항목을 통해 실행중인 프로세스를 확인 가능
  • 수많은 프로세스들이 동시에 실행되고 있다.
    • CPU는 한 번에 하나의 프로세스만 실행 가능하므로, CPU는 이 프로세스들을 조금씩 번갈아가며 실행한다.
      • 즉, CPU가 프로세스들의 실행을 전환하는 것을 반복한다.
  • 운영체제는 이처럼 동시다발적으로 생성/실행/삭제되는 각기다른 다양한 프로세스를 일목요연하게 관리해야 한다.
    • 어떻게 일목요연하게 다룰 수 있을까? : 프로세스와 스레드, 프로세스 동기화, 교착상태 해결

2. 자원 접근 및 할당

모든 프로세스는 실행을 위해 자원을 필요로 한다. 크게 3가지의 자원에 대한 접근 및 할당을 배울 수 있다.

  • CPU (CPU 스케쥴링)
    • 어떤 프로세스를 먼저, 얼마나 오래 실행할까?
  • 메모리 (페이징, 스와핑, ...)
    • 메모리의 비어있는 공간을 어떻게 찾을지, 프로세스를 메모리에 다 적재하는 것이 효율적인지...
  • 입출력장치 (인터럽트 서비스 루틴)
    • 응용프로그램이 입출력 장치를 할당바당 실행되고자 할때 이를 돕는 문제

3. 파일 시스템 관리

  • 파일 시스템(file system)
    • 관련된 정보를 파일이라는 단위로 저장 장치에 보관 & 파일들을 묶어 폴더(디렉터리) 단위로 저장 장치에 보관
    • 이런 파일 시스템 역시 운영체제가 지원하는 핵심 서비스 중 하나

가상 머신과 이중 모드의 발전

가상 머신을 통한 가상화를 지원하는 현대 CPU는 두 가지 모드 이상을 지원한다. ( 이중 모드인 커널 모드와 사용자 모드, 2가지 모드 이상을 지원)

  • 가상 머신(Virtual Machine)
    • 소프트웨어 적으로 만들어낸 가상 컴퓨터.
    • 가상 머신을 설치하면 새로운 운영체제와 응용 프로그램을 설치하고 실행할 수 있다.
      • 윈도우 os에 가상 머신을 설치하면 가상 머신상 리눅스 os와 리눅스 응용프로그램을 설치하고 실행할 수 있다.
  • 이때, 컴퓨터에 설치된 운영체제에서 가상 머신을 설치 및 실행한다면, 그 가상 머신 또한 응용 프로그램이다. 따라서, 사용자 모드로 실행된다.
    • 가상 머신에 설치된 운영체제 역시 사용자 모드로 작동하므로 운영체제 서비스를 제공받기 어렵다.
  • 그래서, 가상화를 지원하는 CPU는 커널 모드와 사용자 모드 이외에 가상 머신을 위한 하이퍼바이저 모드를 따로 둔다.
    • 이로써 가상 머신 상 작동하는 응용프로그램은 하이퍼바이저 모드로써 가상 머신에 설치된 운영체제로부터 운영체제 서비스를 받을 수 있다.

시스템 호출의 종류


Reference

profile
Good Luck!

0개의 댓글