OS 09 - 운영체제 시작하기

<혼자 공부하는 컴퓨터구조 + 운영체제> 를 읽으며 학습한 내용을 정리하고자 한다.

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

운영체제란?

모든 프로그램은 하드웨어를 필요로 한다. 프로그램을 실행하기 위해 필요한 요소를 시스템 자원 혹은 자원이라고 한다.

ex) CPU, 메모리, 보조기억장치, 입출력장치 등과 같은 컴퓨터 부품들

실행할 프로그램에 필요한 자원을 할당하고, 올바르게 실행되도록 돕는 프로그램이 바로 운영체제이다.

운영체제도 그로그램이기 때문에 메모리에 적재되어야 한다. 운영체제는 커널 영역에 따로 적재되어 실행된다. (커널 영역을 제외한 나머지 영역을 사용자 영역이라고 부른다.)

운영체제의 역할

  • 응용 프로그램들의 메모리 주소가 겹치지 않도록 적당한 공간에 적재
  • 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 메모리 자원을 관리
  • 프로그램에 CPU 자원 할당
    • 응용 프로그램이 실행되기 위해서는 반드시 CPU가 필요하다.

2. 운영체제의 큰 그림

운영체제의 심장, 커널

  • 커널 : 운영체제의 핵심 서비스를 담당하는 부분 / (운영체제 = 커널)
  • 사용자 인터페이스 : 커널에 속한 기능은 아님
    • 그래픽 유저 인터페이스(GUI) : 화면처럼 그래픽을 기반으로 컴퓨터와 상호작용
    • 커맨드 라인 인터페이스(CLI) : 명령어를 기반으로 컴퓨터와 상호작용

이중모드와 시스템 호출

운영체제는 자원을 보호하기 위해 응용 프로그램을 실행할 때 오로지 자신을 통해서만 자원에 접근할 수 있게 한다.

즉, 응용프로그램이 자원에 접근하기 위해 운영체제에 도움을 요청한다는 것은 운영체제 코드를 실행하려고 한다는 말과 같다.

  • 이중모드(dual mode) : CPU가 명령어를 실행하는 모드를 사용자 모드와 커널 모드로 구분하는 방식
    • 사용자 모드(user mode) : 운영체제 서비스를 제공받을 수 없는 실행 모드 = 커널 영역의 코드를 실행할 수 없는 모드
      • 일반적인 응용 프로그램은 사용자 모드로 실행
      • 하드웨어 자원에 접근하는 명령어를 실행 불가
    • 커널모드(kernel mode)
      • CPU가 자원에 접근하는 명령어 사용 가능
      • 운영체제는 커널 모드로 실행되기 때문에 자원 접근 가능

사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야 한다. 이러한 요청을 시스템 호출이라고 한다. (시스템 호출은 소프트웨어적인 인터럽트이다.)


[CPU의 시스템 호출 처리 순서]

  1. 시스템 호출을 발생시키는 명령어 실행
  2. CPU는 지금까지의 작업 백업 및 커널 모드로 전환
  3. 커널 영역 내에 시스템 호출을 수행하는 코드(인터럽트 서비스 루틴) 실행
  4. 기존에 실행하던 응용 프로그램으로 복귀하여 재실행

[예시]

  1. 하드 디스크에 데이터를 저장하는 시스템 호출 발생
  2. CPU는 지금까지의 작업 백업 및 커널 모드로 전환
  3. 운영체제 내의( == 커널 영역 내의 ) “하드 디스크에 데이터를 저장하는 코드” 실행
  4. 사용자 모드로 복귀하여 재실행

운영체제의 핵심 서비스

  1. 프로세스 관리
  • 프로세스 : 실행 중인 프로그램
  1. 자원 접근 및 할당
  • CPU
    • CPU 스케줄링 : 어떤 프로세스에서 얼만큼 시간의 CPU를 할당할 것인지 결정
  • 메모리
    • 새로운 프로세스가 적재될 때, 어떤 주소에 적재할지 결정
  • 입출력장치
    • 입출력장치가 발생시키는 하드웨어 인터럽트는 커널 영역에 존재
    • 입출력장치가 CPU에 하드웨어 인터럽트 요청 신호를 보내면, CPU는 하던 일을 백업하고, 커널 영역에 있는 인터럽트 서비스 루틴을 실행
    • 운영체제는 인터럽트 서비스 루틴을 제공함으로써 입출력 작업을 수행
  1. 파일 시스템 관리
  • 파일 열기, 생성, 삭제 관리