[AIVLE CS 스터디] 운영체제의 기초 개념

cjkangme·2023년 4월 13일
0

CS-스터디

목록 보기
5/9
post-custom-banner
  • 스터디 설명 : 에이블스쿨 교육생들과 CS 공부를 위해 자발적으로 개설 및 참여한 스터디입니다.
  • 혼자 공부하는 컴퓨터 구조+운영체제를 교재로 사용하였고, 일부 내용은 별도의 자료로 공부하였습니다.

운영체제란

  • CPU, 메모리, 보조기억장치 등은 모두 프로그램 실행에 필요한 자원이다.
  • 운영체제는 실행할 프로그램에 필요한 자원을 할당해주고, 올바르게 실행되도록 돕는 특별한 프로그램이다.
    • 프로그램이므로 여느 프로그램과 마찬가지로 메모리에 적재되어 실행된다.
    • 컴퓨터 부팅 시 메모리 내 커널 영역이라는 특별한 공간에 따로 적재된다.
  • 운영체제는 다른 응용 프로그램들이 서로 겹치지 않도록 적당한 공간에 적재하고, 사용하지 않는 프로그램을 메모리에서 삭제하는 등 메모리 자원을 관리한다.
  • 또한 동시에 여러 프로그램이 실행될 수 있도록 CPU 스케줄링을 한다.
  • 운영체제에서도 관리할 자원별로 기능이 나누어져있어, 어느 한 부분은 메모리를, 어느 한 부분은 하드디스크를, 어느 한 부분은 프로세스 등을 나누어 관리한다.

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

  • 하드웨어를 조작하고 관리하는 기능을 제공한다. → 프로그램 개발 시 이러한 코드를 일일히 작성할 필요가 없다. → 하지만 밑단에서 오류가 발생할 경우 해결을 위해서라면 운영체제가 어떻게 동작하는지 알아야 한다.
  • 즉 운영체제를 알아야하는 이유는 코드가 어떻게 실행되고, 어떤 문제가 있었는지를 운영체제가 제공하기 때문에, 제공한 정보를 이해하고 문제를 해결하기 위해서이다.

09-2 운영체제의 큰 그림

커널

  • 운영체제의 핵심 서비스를 담당하는 부분을 커널(kernel)이라고 한다.
  • 운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스에는 대표적으로 사용자 인터페이스(UI)가 있다.
    • 그저 컴퓨터와 상호작용하기 위한 통로일 뿐, 커널에 속한 기능은 아니다.

이중 모드와 시스템 호출

  • 운영체제는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다.
    • 이를 방지하기 위해 응용 프로그램은 오직 운영체제를 통해서만 자원에 접근할 수 있다.
    • 즉 응용 프로그램은 운영체제에 운영체제 코드를 실행하려 한다는 것을 요청하고, 운영체제가 해당 작업을 수행한다.
  • 이러한 운영체제의 문지기 역할을 구현하기 위해 이중 모드를 사용한다.
  • 이중 모드란 CPU가 명령어를 실행하는 모드를 사용자 모드와 커널 모드로 구분하는 방식을 말한다.
    • 사용자 모드 : 커널 영역의 코드를 실행할 수 없는 모드. 하드웨어에 접근하는 명령어를 실행할 수 없다. (프로그램을 실행하면 기본적으로 사용자 모드이다)
    • 커널 모드 : 커널 영역의 코드를 실행할 수 있는 모드 (운영체제가 실행되는 모드)
    • 두 모드는 플래그 레지스터 속 슈퍼바이저 플래그를 통해 알 수 있다.
  • 사용자 모드의 프로그램이 자원에 접근하기 위해서는 운영체제에 시스템 콜(system call)이라는 요청을 보내야 한다.
    • 시스템 콜을 통해 프로그램은 커널 모드로 전환하여 운영체제 서비스(커널 영역 코드)를 제공받을 수 있다.
    • 이러한 시스템 콜은 일종의 인터럽트인데, 특정 명령어에 의해 발생하는 인터럽트이므로 소프트웨어 인터럽트라고 한다.
    • 즉 시스템 콜의 처리 과정은 인터럽트 처리 순서와 동일하다.
    • 시스템 콜을 통해 운영체제 서비스에 접근할 수 있는 이유는, 각 프로그램이 일반 함수 호출을 통해 자유롭게 커널 영역 코드를 확인하게 되면, 이중모드를 사용하는 의미가 없기 때문이다.
      혹시라도 응용 프로그램으로 인해 커널 영역의 메모리가 오염되면 운영체제 전체에 문제가 발생할 수 있어 보안 문제를 위해 사용자 모드와 커널 모드의 구분은 철저히 이루어져야 한다.

운영체제의 핵심 서비스

  • 커널에 해당하는 부분이다.

프로세스 관리

  • 프로세스는 실행 중인 프로그램을 의미한다.
  • 여러 프로세스가 동시에 실행되는 환경에서는 ‘프로세스 동기화’가 필수적이고, 프로세스가 더이상 실행되지 못하는 교착 상태를 해결해야 한다.
  • 교착 상태에 대해서는 추후 다시 다룰 것이다.

자원 접근 및 할당

  • 운영체제는 각 자원을 어떻게 관리하고 어떤 기능을 제공할까?
  • CPU
    • 어떤 프로세스부터 CPU를 이용할 것인지, 얼마나 오래 CPU를 이용하게 할 지를 결정하는 CPU 스케줄링 기능을 수행
  • 메모리
    • 새로 프로그램이 실행될 때마다 어느 주소에 적재해야 할 지 결정
    • 메모리가 부족할 경우 이를 극복 (추후 자세히 학습)
  • 입출력 장치
    • 인터럽트 서비스 루틴 제공 (CPU가 인터럽트를 해결하기 위한 프로그램이 바로 커널 영역에 있다)

파일 시스템 관리

  • 보조기억장치 속 데이터의 생성, 삭제 조회를 관리

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

  • 현대 CPU는 가상 머신을 통한 가상화를 지원하여 사용자 모드, 커널 모드 외에 더 많은 모드를 제공한다.
  • 가상 머신이란 소프트웨어적으로 만들어낸 가상 컴퓨터를 말하는데, 물리적인 컴퓨터와 같이 별도의 램, 보조기억장치, CPU 등을 갖고 있고 별도로 프로그램을 설치 및 실행할 수 있다.
  • 가상 머신 또한 하나의 프로그램이므로 사용자 모드로 작동하는데, 이러면 가상 머신 상에서 작동하는 프로그램이 가상 머신 운영체제의 도움을 받지 못한다.
  • 가상화를 지원하는 CPU는 이를 하이퍼바이저 모드로 해결한다.

시스템 호출의 종류

  • 프로세스 관리 : 프로세스 생성/실행/종료/대기

  • 파일 관리 : 파일 열기/닫기/읽기/쓰기, 정보 획득

  • 디렉터리 관리 : 디렉터리 생성/변경/삭제

  • 파일 시스템 관리 : 마운트 및 마운트 해제

  • 프로그래밍 언어들은 내부적으로 위 시스템 호출을 통해 실행된다. (print, input 등)

  • 운영체제 별로 다양한 시스템 호출의 종류가 있다.

post-custom-banner

0개의 댓글