[이것이 취업을 위한 컴퓨터 과학이다] : 운영체제 - 운영체제의 큰 그림

운영체제란?

프로그램들 간의 올바른 실행을 돕고, 다양한 하드웨어 자원을 프로그램에 배분하는 프로그램이다. 컴퓨터시스템의 핵심소프트웨어로 응용프로그램과 컴퓨터하드웨어 간의 상호작용을 관리하고 제어하는 역할을 한다.

대표적인 운영체제

데스크탑 : 윈도우, 맥OS, 리눅스
스마트폰 : 안드로이드, iOS

운영체제의 구조

크게는 인터페이스와 커널로 구분되며,
커널 은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 담당한다.
운영체제의 성능은 커널이 좌우한다.
인터페이스 는 사용자와 응용프로그램에 인접하여 커널에 명령을 전달하고 실행 결과를 사용자와 응용프로그램에 돌려주는 역할을 한다.

운영체제의 핵심기능 및 역할

 

핵심기능

1. 자원 할당 및 관리

  • CPU 관리: CPU 스케줄링
  • 메모리 관리: 가상 메모리
  • 파일/디렉터리 관리: 파일 시스템

2. 프로세스 및 스레드 관리

  • 프로세스와 스레드
  • 동기화와 교착상태

 

역할

운영체제는 사용자가 실행하는 응용 프로그램을 대신하여 CPU, 메모리, 보조기억장치 등의 컴퓨터 부품에 접근하고, 각각의 부품들이 효율적으로 사용되도록 관리한다. 또 응용 프로그램이 컴퓨터 부품들을 효율적으로 할당받아 문제 없이 실행할 수 있도록 응용 프로그램에게 자원을 할당한다.

자원이란?
프로그램 실행에 마땅히 필요한 요소
ex) '데이터', '부품'(하드웨어)



1. CPU관리: CPU스케쥴링

CPU는 한정된 자원이기 때문에 CPU를 할당받아 사용하기 위해 때로는 다른 프로그램의 CPU 사용이 끝날때까지 기다려야한다. 그래서 운영체제는 실행중인 모든 프로그램이 공정하고 합리적으로 CPU를 할당받도록 CPU의 할당 순서와 사용 시간을 결정한다.

  • 기본개념 - 우선순위, 스케쥴링 큐, 선점형과 비 선점형
  • CPU 스케쥴링 알고리즘
  • 리눅스 CPU 스케쥴링

 

2. 메모리 관리: 가상 메모리

운영체제는 새롭게 실행하는 프로그램을 메모리에 적재하고, 종료된 프로그램을 메모리에서 삭제한다.
'가상 메모리'는 실제 물리적인 메모리 크기보다 더 큰 메모리를 이용할 수 있도록 하는 기술이다.

3. 파일/디렉터리 관리: 파일 시스템

운영체제는 보조기억장치를 효율적으로 관리하기위해 파일시스템을 활용한다.
파일시스템은 보조기억장치 내의 정보를 파일 및 폴더 단위로 접근, 관리할 수 있도록 만드는 운영체제 내부 프로그램이다.

  • 파일과 디렉터리
  • 파일 시스템

 

4. 프로세스 및 스레드 관리

운영체제는 프로세스에 필요한 자원을 할당하고, 스레드는 프로세스가 할당받은 자원을 이용해 프로세스의 작업을 수행한다.
프로세스를 이루는 스레드가 둘 이상인 경우 동일한 작업을 동시에 실행할 수도 있다.

  • 프로세스와 스레드
  • 동기화와 교착상태

 

프로세스란?
실행 중인 프로그램
스레드란?
프로세스를 이루는 실행의 단위


운영체제는 동시다발적으로 수행되는 프로세스와 스레드가 올바르게 처리되도록 실행의 순서를 제어하고, 프로세스와 스레드가 요구하는 자원을 적절하게 배분할 수 있어야한다.

시스템 콜과 이중모드

운영체제도 프로그램이기 때문에 반드시 메모리에 적재되어있어야한다.
다만 운영체제는 매우 특별한 프로그램이므로 메모리 내의 커널 영역 이라는 공간에 적재되어 실행된다.
커널 영역 외에 사용자 응용 프로그램이 적재되는 공간은 사용자 영역이라고 한다.



운영체제의 기능을 제공받기 위해서는 커널 영역에 적재된 운영체제 코드를 실행해야한다.
즉, 운영체제가 자신의 코드를 실행한 응용프로그램의 자원 접근 및 조작을 대행한다.

 

시스템 콜

운영체제는 시스템 콜을 호출하여 운영체제 코드를 실행할 수 있다.
시스템콜은 운영체제의 서비스를 제공받기 위한 수단(인터페이스)로, 호출 가능한 함수의 형태를 가진다.



운영체제로 부터 어떤 기능을 제공 받고자 할때 위와 같이 호출하면 된다.

시스템 콜의 종류

프로세스 관리

  • fork() : 새 자식 프로세스 생성
  • execve() : 프로세스 실행(메모리공간을 새로운 프록램의 내용으로 덮어씌움)
  • exit() : 프로세스 종료
  • waitpid() : 자식 프로세스가 종료할 때까지 대기

파일 관리

  • open()
  • close()
  • read()
  • write()
  • stat() : 파일 정보 획득

디렉터리 관리

  • chdir() : 작업 디렉터리 변경
  • mkdir() : 디렉터리 생성
  • rmdir() : 비어 있는 디렉터리 삭제

파일 시스템 관리

  • mount() : 파일 시스템 마운트
  • umount() : 파일 시스템 마운트 해제

소프트웨어 인터럽트

운영체제에는 인터럽트를 발생시키는 특정 명령어가 있다.
자원에 접근하는 입출력 명령어가 대표적이며, 이러한 명령어에 의해 발생하는 인터럽트를 소프트웨어 인터럽트라고 한다.

시스템콜은 소프트웨어 인터럽트의 일종이다.

소프트웨어 인터럽트 발생 (시스템 콜 호출)
-> CPU의 커널모드 전환 (CPU는 현재수행중인 작업을 백업)
-> 운영체제 코드(커널 영역 내의 인터럽트을 처리하기 위한 코드) 실행
-> 사용자 모드로 재전환 (사용자 영역 코드 실행)

커널 모드

운영체제 서비스를 제공받을 수 있는 실행모드로 커널영역의 코드를 실행할 수 있다.
CPU가 커널모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있다.

사용자 모드

운영체제 서비스를 제공받을 수 없는 모드로 커널영역의 코드를 실행할 수 없다.
자원에 접근하는 명령어를 만나더라도 이를 실행하지 않는다.(실수로라도 자원에 접근할 수 없다.)

예상 질문

 

✔️ 운영체제는 무엇이고, 어떻게 구성되어 있나요?

응용프로그램과 하드웨어 간의 상호작용을 관리하고 제어하는 프로그램입니다. 크게는 커널과 인터페이스로 구분되며, 커널은 프로세스 관리, 메모리 관리, 저장장치 관리와 같은 운영체제의 핵심적인 기능을 담당하고, 인터페이스는 사용자와 응용프로그램에 인접하여 커널에 명령을 전달하고 실행 결과를 사용자와 응용프로그램에 돌려주는 역할을 합니다.

✔️ 운영체제의 역할에 대해 간략히 설명해주세요.

운영체제는 사용자를 대신해 CPU, 메모리, 보조기억장치 등 컴퓨터 자원에 접근하고 이를 효율적으로 관리합니다. 또한, 응용 프로그램이 원활하게 실행되도록 자원을 적절히 할당합니다.
주요 역할로 CPU 관리, 메모리 관리, 파일 시스템 관리, 프로세스 및 스레드 관리 등이 있습니다.

✔️ 시스템콜이란 무엇이고, 어떤 역할을 하나요?

시스템 콜은 응용 프로그램이 운영체제의 기능을 사용할 수 있도록 제공하는 인터페이스입니다. 운영체제의 자원(CPU, 메모리, 파일 등)에 직접 접근할 수 없는 응용 프로그램이 시스템 콜을 통해 운영체제의 서비스를 요청합니다. 시스템 콜은 일반적으로 함수 호출 형태로 제공되며, 호출 시 커널 영역의 운영체제 코드가 실행됩니다.