운영체제

 

  • 모든 프로그램은 실행을 위해 자원을 필요로 함
    • 자원 : 프로그램 실행에 있어 마땅히 필요한 요소들
      (컴퓨터의 4가지 핵심 부품 포함 - CPU, 주기억장치, 보조기억장치, 입출력장치)

 

운영체제란?


규모가 크고 방대한 운영체제

  • 실행할 프로그램에 필요한 자원을 할당하고
  • 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램

 

  • 실행되고 있는 프로그램은 메모리에 적재되기 때문에 운영체제도 메모리에 적재되어 있음
  • 다만 중요한 프로그램이기 때문에 "커널 영역"이라는 곳에 적재되어 있음
  • 커널은 운영체제의 핵심 기능을 담당함
    대부분의 전공서에서 운영체제는 커널을 이야기 함


  • 우리가 일반적으로 사용하는 응용 프로그램은 사용자 영역에 적재됨
    • 응용 프로그램 (application software)
      - 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램
      - 메모장, 게임 등등..

 

  • 운영체제에는 속하는데 커널에는 속하지 않는 부분도 있음
    • 유저 인터페이스(UI, User Interface) : 터치 혹은 마우스 등으로 사용자와 상호작용하는 통로 
    • 커맨드 라인 인터페이스 : 명령어로 접근하는 인터페이스 
    • 사용자와 컴퓨터 간의 통로일 뿐 운영체제의 핵심 기능(커널)은 아님 

 


 

 

이중모드와 시스템 호출


  • 사용자가 실행하는 프로그램은 자원에 직접 접근할 수 있을까? NO
  • 자원에 직접 접근하는 것은 위험함 
  • 그러므로 일반적인 응용프로그램은 자원에 직접 접근할 수 없음

 

  • 운영체제는 응용프로그램들이 자원에 접근하려고 할 때 오직 자신을 통해서만 접근하도록 하여 자원을 보호함 
  • 일종의 문지기 역할
  • 응용 프로그램이 자원에 접근하려면 운영 체제에게 도움을 요청해야 함
    = 운영 체제의 코드를 실행해야 함 

운영체제에게 도움 요청!

 

 

이중 모드

  • CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식
  • 사용자 모드
    • 운영체제 서비스를 제공받을 수 없는 실행 모드
    • 커널 영역의 코드를 실행할 수 없는 실행 모드
    • 자원 접근 불가
    • 운영 체제의 도움 없이 실행될 수 있는 실행 모드 
  • 커널 모드
    • 운영체제의 서비스를 제공받을 수 있는 실행 모드
    • 자원 접근을 비롯한 모든 명령어 실행 가능

  • 플래그 레지스터 안에 슈퍼바이저 플래그로 [커널모드 / 사용자모드] 구분
  • 이걸 이용해 운영체제가 자원 접근을 대행하고 자원을 보호해줌

 

  • 예를 들어 입출력장치에 접근하는 명령어를 실행해야 하면, 자원에 접근해야 하기 때문에 커널모드로 실행되어야 함

 

 

시스템 호출 

  • 운영체제 서비스를 제공받기 위해 커널모드로 전환하는 방법
  • 일종의 소프트웨어 인터럽트
  • print()와 같은 프로그래밍 언어의 문법도 내부적으로는 이런 시스템 호출을 통해 실행

시스템 호출(우)은 운영체제마다 이미 정해져 있음

 

 

  • 일종의 소프트웨어 인터럽트이기 때문에 시스템 호출이 처리되는 방식은 하드웨어 인터럽트 처리 방식과 유사함 

 

  • 응용프로그램이 자원에 빈번하게 접근하기 때문에 시스템 호출도 아주 자주 일어남
  • 아래와 같이 커널모드와 사용자 모드를 번갈아가며 실행함 

 


 

운영체제의 핵심 서비스


1. 프로세스 관리

 

  • 프로세스 == 실행 중인 프로그램
  • 수많은 프로세스들이 동시에 실행
  • 운영체제는 현재 메모리에 적재되서 동시에 실행되고 있는 여러 프로세스들을 관리해줌 

 

 

  • 동시에 실행이라고는 하지만, 실제로는 사용자가 눈치채지 못할 정도로 빠르게 번갈아가면서 실행됨
  • 운영체제는 동시다발적으로 생성되고 실행되고 삭제되는 다양한 프로세스들을 일목요연하게 관리할 수 있어야 함
    • 프로세스와 스레드, 프로세스 동기화, 교착상태 해결 등... 뒤에서 배울 것들  

 

 

2. 자원 접근 및 할당

CPU / 메모리 / 입출력장치


CPU 스케줄링

: 어떤 프로세스를 먼저, 얼마나 오래 실행할지 결정

  • CPU는 명령어를 실행해주는 부품. 그렇기 때문에 모든 프로세스는 실행되려면 CPU를 할당받아서 실행해야 하는데, 너무 다양한 프로세스들이 동시에 실행되고 있으므로 운영체제가 이걸 조율해줌 

 

  • 여러프로그램을 동시에 실행할 때 그 시간 단위를 아주 미세하게잘라보면,
    사용자가 인지하지 못할 정도로 빠르게 번갈아 가면서 프로그램을 실행하는 것
  • 이처럼 여러가지 프로그램을 동시에 실행시킬 때
    어떤 프로그램을 먼저 실행할지, 어떤 프로그램이 얼마나 오랫동안 CPU를 점유해서 실행될 것인지 등을 운영체제가 결정해 줌

 

 

 

메모리 (페이징, 스와핑)

  • 메모리의 비어있는 공간에 프로그램을 적재해주고,
    반대로 사용하지 않는 프로그램이 있다면 메모리에서 삭제하는 역할
  • 실행하려는 프로세스가 메모리보다 큰 경우에도 실행가능하도록 처리 

 

 

입출력장치

  • 하드웨어 인터롭트에서 이야기했던 인터롭트 서비스 루틴은 운영체제가 제공해주는 기능 
  • 응용 프로그램이 입출력 장치에 접근하고자 할 때, 어떤 입출력 장치를 할당받아서 실행되고자 할 때 운영체제는 인터럽트 서비스 루틴을 제공함으로써 각각의 응용프로그램한테 입출력 장치를 접근할 수 있도록 할당함 
  • 프린터와 같이 한 번에 하나의 프로세스만 접근 가능한 하드웨어가 있을 때 그 순서를 관리해줌

 

 

 

 

3. 파일 시스템 관리

  • 관련된 정보를 파일이라는 단위로 저장 장치에 보관
  • 파일들을 묶어 폴더(디렉터리) 단위로 저장 장치에 보관
  • 즉, 보조기억 장치에 있는 정보들을 파일과 폴더로 묶어서 관리

 

 

 

 

운영체제를 공부해야 하는 이유


 

 

  • 운영체제는 우리가 실행하는 응용 프로그램과 하드웨어 사이를 연결 지어주는 다리 같은 프로그램
  • 하드웨어와 가까운 곳에 위치함으로써
    이 프로그램들이 요구하는 자원을 할당해주고 올바르게 실행되도록 돕는 특별한 프로그램 

운영체제가 없다면...

  • 하드웨어에 직접 접근하고 조작하는 코드를 개발자가 하나하나 일일이 만들어야 함 
  • print() 이런것도 모두 운영체제의 도움을 받아 실행되는 함수들
  • 운영체제가 있으니, 하드웨어와 프로그램 사이에 있기때문에 하드웨어에 접근하고 싶다면
    직접적으로 하드웨어에 접근하는 코드가 필요한게 아니라
    그 파일을 생성하고 파일에 접근하는 운영체제의 코드를 실행하면 됨

 

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

  • 운영체제는 프로그램을 위한 프로그램
  • 그러므로 프로그램을 만드는 개발자는 운영체제를 알아야 함
  • 만약 프로그램에 어떤 문제가 발생한다면 그걸 가장 먼저 알아채리는 것은 운영체제임
  • 대부분의 에러메시지도 운영체제가 만들어주는 것
  • 그러므로 운영체제를 알면 오류 메시지에 대한 깊은 이해를 할 수 있게 되어 문제 해결 능력이 향상

 

 

 

출처 : 혼자 공부하는 컴퓨터구조 + 운영체제 (저자 강민철)