////
Search

1. 운영체제 큰 그림

운영체제 : 특별한 프로그램
종류에 관계없이 운영체제가 제공하는 핵심적인 기능은 비슷
운영체제의 핵심 기능을 담당하는 부분을 커널(Kernel)이라고 함
graph TD
  1[운영체제] --> 2(큰 그림)
  2(큰 그림) --> 3(커널)
  2(큰 그림) --> 4(시스템 콜)
  1[운영체제] --> 5(프로세스 및 스레드 관리)
  5(프로세스 및 스레드 관리) --> 6(프로세스와 스레드)
  5(프로세스 및 스레드 관리) --> 7(동기화와 교착 상태)
  1[운영체제] --> 8(자원 할당 및 관리)
  8(자원 할당 및 관리) --> 9(CPU 관리 : CPU 스케줄링)
  8(자원 할당 및 관리) --> 10(메모리 관리 : 가상 메모리)
  8(자원 할당 및 관리) --> 11(파일/디렉터리 관리 : 파일 시스템)
Mermaid
복사

운영체제의 역할

운영체제의 핵심 기능 : 자원 할당 및 관리 자원(시스템 자원) : 프로그램 실행에 마땅히 필요한 요소
1.
운영체제는 사용자가 실행하는 응용 프로그램을 대신해 CPU, 메모리, 보조기억장치 등의 컴퓨터 부품에 접근하고, 각 부품들이 효율적으로 사용되도록 관리
2.
응용 프로그램이 컴퓨터 부품들을 효율적으로 할당받아 문제 없이 실행할 수 있도록 응용 프로그램에게 자원을 할당

CPU 관리 : CPU 스케줄링

메모리에는 실행 중인 프로그램이 다수 적재되지만, CPU가 이들 모두를 동시 실행 가능한 것은 아님. CPU는 한정된 자원이므로 CPU를 할당받아 사용하기 위해 때로는 다른 프로그램의 CPU 사용이 끝날 때까지 기다리는 것도 필요. 그래서 운영체제가 실행 중인 모든 프로그램들이 공정하고 합리적으로 CPU를 할당받도록 CPU의 할당 순서와 사용 시간을 결정(= CPU 스케줄링)
graph TD
  1[CPU 관리 : CPU 스케줄링] --> 2(기본 개념 : 우선순위, 스케줄링 큐, 선점형 & 비선점형)
  1[CPU 관리 : CPU 스케줄링] --> 3(CPU 스케줄링 알고리즘)
  1[CPU 관리 : CPU 스케줄링] --> 4(리눅스 CPU 스케줄링)
Mermaid
복사

메모리 관리 : 가상 메모리

운영체제는 새롭게 실행하는 프로그램을 메모리에 적재하고, 종료된 프로그램을 메모리에서 삭제. 동시에 낭비되는 메모리 용량이 없도록 효울적으로 관리. 이를 위해 가상 메모리 기술을 활용
가상 메모리 : 운영체제의 메모리 관리 기법 중 하나 (실제 물리적인 메모리 크기보다 더 큰 메모리를 이용 가능하도록 하는 기술)
graph TD
  1[메모리 관리 : 가상 메모리] --> 2(물리 주소 & 논리 주소)
  1[메모리 관리 : 가상 메모리] --> 3(메모리 할당)
  1[메모리 관리 : 가상 메모리] --> 4(페이징 & 페이지 교체 알고리즘)
Mermaid
복사

파일/디렉토리 관리 : 파일 시스템

메모리보다 더 큰 용량을 갖고 있는 보조기억장치는, 더욱 일목요연하게 관리할 필요가 있음. 운영체제는 보조기억장치를 효율적으로 관리하기 위해 파일 시스템을 활용
파일 시스템 : 보조기억장치 내의 정보를 파일 및 폴더 단위로 접근 및 관리할 수 있도록 만드는 운영체제 내부 프로그램
graph TD
  1[파일/디렉토리 관리 : 파일 시스템] --> 2(파일 & 디렉터리)
  1[파일/디렉토리 관리 : 파일 시스템] --> 3(파일 시스템)
Mermaid
복사
입출력장치, 캐시 메모리 또한 운영체제에 의해 관리되는 자원 (운영체제가 일부 입출력장치의 장치 드라이버, 하드웨어 인터럽트 서비스 루틴을 제공하거나 캐시 메모리의 일관성을 유지하는 등의 기능 제공)

프로세스 및 스레드 관리

프로세스 : 실행 중인 프로그램
스레드 : 프로세스를 이루는 실행 단위
메모리에는 여러 프로세스가 적재 가능. 운영체제는 이 프로세스에 필요한 자원을 할당하고, 스레드는 프로세스가 할당받은 자원을 이용해 프로세스의 작업을 수행 (프로세스를 이루는 스레드가 둘 이상인 경우, 동일 작업을 동시 실행 가능)
같은 프로그램이라도 여러 번 실행하면 별도의 프로세스가 될 수 있음
운영체제는 이렇게 동시다발적으로 실행되는 프로세스와 스레드가 올바르게 처리되도록 실행 순서를 제어하고, 프로세스와 스레드가 요구하는 자원을 적절히 배분해야함
graph TD
  1[프로세스 및 스레드 관리] --> 2(프로세스 & 스레드)
  1[프로세스 및 스레드 관리] --> 3(동기화 & 교착 상태)
Mermaid
복사

시스템 콜과 이중 모드

운영체제 또한 일종의 프로그램 → 프로그램이 실행되기 위해 반드시 메모리에 적재되어야함. 다만, 특별한 프로그램이므로 메모리 내의 커널 영역이라는 공간에 따로 적재되어 실행. 사용자 응용 프로그램이 적재되는 공간은 사용자 영역.
기억할 점 : 운영체제 기능을 제공받기 위해서는, 커널 영역에 적재된 운영체제 코드를 실행해야 함
(사용자)응용 프로그램은 CPU, 메모리 같은 자원에 직접 접근하거나 조작 불가(운영체제 코드 실행 필요). 응용 프로그램이 운영체제 코드를 실행하려면, 시스템 콜(system call)을 호출해 운영체제 코드를 실행해야함. 시스템 콜은 운영체제 서비스를 제공받기 위한 수단(인터페이스)으로, 호출 가능한 함수 형태.
운영체제에 따라 제공하는 시스템 콜의 종류와 개수는 다양 → 응용 프로그램들은 내부적으로 시스템 콜을 호출해 운영체제 기능을 제공받는다는 점을 기억

유닉스 계열의 운영체제에서 사용하는 대표적인 시스템 콜 종류

구분
시스템 콜
설명
프로세스 관리
fork()
새 자식 프로세스 생성
프로세스 관리
execve()
프로세스 실행(메모리 공간을 새로운 프로그램의 내용으로 덮어씌움)
프로세스 관리
exit()
프로세스 종료
프로세스 관리
waitpid()
자식 프로세스가 종료할 때까지 대기
파일 관리
open()
파일 열기
파일 관리
close()
파일 닫기
파일 관리
read()
파일 읽기
파일 관리
write()
파일 쓰기
파일 관리
stat()
파일 정보 획득
디렉터리 관리
chdir()
작업 디렉터리 변경
디렉터리 관리
mkdir()
디렉터리 생성
디렉터리 관리
rmdir()
비어 있는 디렉터리 삭제
파일 시스템 관리
mount()
파일 시스템 마운트
파일 시스템 관리
unmount()
파일 시스템 마운트 해제

프로세스 계층 구조

fork() 시스템 콜처럼 프로세스는 시스템 콜을 통해 또 다른 프로세스를 생성하고, 그렇게 생성된 프로세스는 또 다른 프로세스를 생성 가능. 많은 운영체제에서 프로세스들을 계층적으로 관리
부모 프로세스 : 새 프로세스를 생성한 프로세스
자식 프로세스 : 부모 프로세스에 의해 생성된 프로세스
graph TD
  1[프로세스] --> 2[프로세스]
  1[프로세스] --> 3[프로세스]
  1[프로세스] --> 4[프로세스]
  2[프로세스] --> 5[프로세스]
  2[프로세스] --> 6[프로세스]
  3[프로세스] --> 7[프로세스]
  3[프로세스] --> 8[프로세스]
  4[프로세스] --> 9[프로세스]
  4[프로세스] --> 10[프로세스]
Mermaid
복사

시스템 호출시 동작 과정

소프트웨어 인터럽트 : 자원에 접근하는 입출력 명령어와 같은 명령어에 의해 발생하는 인터럽트 (EX : 시스템 콜)
1.
사용자 영역을 실행하는 과정에서 시스템 콜이 호출되면 여느 인터럽트와 마찬가지로 CPU는 현재 수행 중인 작업을 백업
2.
커널 영역 내의 인터럽트를 처리하기 위한 코드(시스템 콜을 구성하는 코드)를 실행
3.
다시 사용자 영역의 코드 실행 재개

이중 모드

CPU는 명령어를 실행하는 과정에서 사용자 영역을 실행할 때의 모드커널 영역을 실행할 때의 모드를 구분해서 실행. 2개의 모드로 구분해 실행하는 것을 이중 모드(dual mode)라고 함
사용자 모드(user mode) : 사용자 영역에 적재된 코드를 실행할 때의 실행 모드
운영체제 서비스를 제공받을 수 없는 실행 모드 : 커널 영역의 코드를 실행 불가한 모드
사용자 모드로 실행되는 명령어는 실수로라도 자원에 접근 불가
커널 모드(kernel mode) : 커널 영역에 적재된 코드를 실행할 때의 실행 모드
운영체제 서비스를 제공받을 수 있는 실행 모드 : 커널 영역의 코드를 실행 가능한 모드
자원에 접근하는 명령어를 비롯한 모든 명령어 실행 가능
운영체제는 이 커널 모드로 실행되기 때문에 자원에 접근 가능한 것
단순 프로그램조차도 많은 시스템 콜을 호출함. 프로그램은 시스템 콜을 통해 사용자 모드와 커널 모드를 빈번히 오가며 운영체제 소스 코드를 실행