[CS] 운영체제에 대해서 자세하게 알아보자

운영체제란 무엇인가?

운영체제란 컴퓨터 전체를 진두지휘하는 핵심 프로그램을 말한다.

  • CPU 스케줄링 : 프로그램들에게 CPU를 어떻게 할당하고 관리할 것인지 결정
  • 메모리 관리 : 메모리를 어떻게 할당하고 관리할 것인지 결정
  • 프로세스 관리 : 프로세스의 실행을 제어하고 관리
  • 파일 관리 : 파일 시스템을 관리
  • 입출력 관리 : 입출력 장치를 제어하고 활용

운영체제는 커널 영역에서 실행되며, 나머지 프로그램들은 사용자 영역에 적재된다.

 

주요 운영체제

  • UNIX : 1969년 벨 연구소에서 개발된 운영체제로, 이식성이 좋고 커널 크기가 작으며, 소스 코드가 공개되었다.
  • NINUX : UNIX의 영향을 받은 리누스 토발즈가 개발한 운영체제로, 소스가 공개되어 있다.
  • POSIX : UNIX 운영체제 기반의 인터페이스로 리눅스도 POSIX를 준수한다.
  • macOS, iOS : 애플의 운영체제로 UNIX기반이며 POSIX 규격을 준수한다.

커널과 쉘

  • 커널 : 운영체제의 핵심 부분으로, 메모리에 상주하며 시스템 자원을 관리한다.
  • 쉘 : 커널과 사용자 프로그램 간의 대화를 가능하게 해주는 명령어 해석기 이다.

이중 모드와 시스템 콜

  • 이중 모드 : CPU 명령어 실행 모드로 커널 모드와 유저 모드로 나뉜다.
    • 커널 모드 : 운영체제가 지원하는 함수를 실행할 수 있는 모드이다.
    • 유저 모드 : 운영체제가 지원하는 함수를 실행할 수 없는 모드이다.

  • 시스템 콜 : 프로그램이 실행 중 커널 모드로 전환해 운영체제 서비스를 요청하는 것이다.

프로세스와 스레드

  • 프로세스 : 실행 중인 프로그램을 의미하며, 프로세스 당 최소 1개의 스레드를 가진다. 
    • PCB(Process Control Block) : 프로세스를 관리하기 위한 정보들이 담긴 자료구조이다
    • Context Switch : 하나의 프로세스에서 다른 프로세스로 CPU 제어권을 넘기는 과정이다.
  • 스레드 : 프로세스 내에서 실행의 단위로, 코드/데이터/힙 영역을 공유하며 독립적인 스택을 가진다.
    • 유저 스레드 : 사용자 프로그램 내의 스레드
    • 커널 스레드 : 커널 내에서 동작하는 스레드

 

CPU 스케줄링

  • 스케줄링 알고리즘 : 프로세스들에게 CPU를 할당하는 방식이다.
    • FCFS : 선입선처리 방식
    • SJF :최단 작업 우선 방식
    • Round Robin : 타임 퀀텀을 사용한 방식
    • Priority : 우선순위 기반 방식
    • Multi Level Queue : 우선순위 별로 여러 개의 레디 규를 사용한다.
    • Multi Level Feedback Queue : 멀티 레벨 큐의 확장판으로, 프로세스의 우선순위를 동적으로 조절한다.

 

프로세스 동기화와 데드락

  • 동기화 기법 : 뮤텍스, 세마포어, 모니터 등을 사용하여 동기화 문제를 해결한다.
  • 데드락 : 프로세스들이 서로 자원을 기다리며 멈추는 상태로 예방/회피/검출 및 회복/무시 방법이 있다.

 

메모리 관리

  • 페이징 : 프로세스의 주소 공간을 고정된 크기의 페이지로 나누고, 물리 주소 공간의 프레임에 할당한다.
    • 페이지 테이블 : 논리 주소를 물리 주소로 변환한다.
    • TLB : 페이지 테이블의 캐시 메모리
  • 세그먼테이션 : 프로세스 주소 공간을 의미, 단위의 세그먼트로 나누어 물리 메모리에 할당
  • 가상 메모리 : 프로세스의 일부분만 메모리에 올리고 실행하는 기법

 

파일 시스템

  • 파일 : 보조기억장치에 저장된 관린 정보의 집합
  • 디렉터리 : 파일을 모은 파일로, 트리 구조를 이룬다.
  • 파일 할당 방식 : 연속 할당, 연결 할당, FAT, 색인 할당 등이 있다.
  • 유닉스 파일 시스템 : i-node를 사용하여 파일 속성과 블록 주소 관리
  • 저널링 기법 : 작업 로그를 통해 시스템 크래시 발생 시 빠르게 복구한다.