본문 바로가기

CS공부🖥️/운영체제

혼공 컴+운 chapter9.운영체제 시작하기

09-1. 운영체제를 알아야 하는 이유

운영체제란

- 시스템자원 : 프로그램 실행에 마땅히 필요한 요소들. ex) CPU, 메모리, 보조기억장치, 입출력장치 등

  • 운영체제 : 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램 => 메모리에 적재
    • 컴퓨터가 부팅될 때 메모리 내 커널 영역이라는 공간에 따로 적재되어 실행.
    • 사용자 영역 : 커널 영역을 제외한 나머지 영역, 사용자가 이용하는 응용 프로그램이 적재되는 영역
    • 운영체제는 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리한다. 
    • 운영체제는 최대한 공정하게 여러 프로그램에 CPU 자원을 할당한다. 
    • 응용 프로그램과 하드웨어 사이에서 응용 프로그램에 필요한 자원을 할당하고, 응용 프로그램이 올바르게 실행되도록 관리하는 역할.

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

- 운영체제는 현재 하드웨어의 상태는 어떠한지, 코드가 어떻게 실행되었는지, 하드웨어 상에 어떤 문제가 있었는지 등을 상세히 알려주고, 이를 통해 문제 해결의 실마리를 찾을 수 있다. => 하드웨어와 프로그램을 더 깊이 이해할 수 있다. 

09-2. 운영체제의 큰 그림

운영체제의 심장, 커널

  • 핵심서비스 : 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능.
  • 커널 : 운영체제의 핵심 서비스를 담당하는 부분. 
  • 커널에 포함되지 않는 서비스 : 사용자 인터페이스(윈도우의 바탕함녀과 같이 사용자가 컴퓨터와 상호작용할 수 있는 통로. 그래픽유저 인터페이스, 커맨드 라인 인터페이스가 있다.)

이중모드와 시스템 호출

- 운영체제는 응용 프로그램들이 자원에 접근하려고 할 때 오직 자신을 통해서만 접근하도록 하여 자원을 보호한다. 

  • 이중모드 : CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식.
    • 사용자 모드 : 운영체제 서비스를 제공받을 수 없는 실행 모드.
    • 커널 모드 : 운영체제 서비스를 제공받을 수 있는 실행 모드. 
    • * CPU가 사용자 모드로 실행중인지, 커널 모드로 실행중인 지 플래그 레지스터 속 슈퍼바이저 플래그를 보면 슈퍼바이저 플래가가 1일경우 커널모드로 실행중, 0일 경우 사용자모드로 실행중 
  • 시스템 호출 : 운영체제 서비스를 제공받기 위한 요청. 사용자모드로 실행되는 프로그램은 시스템 호출을 통해 커널 모드로 전환하여 운영체제 서비스를 제공받을 수 있다. 
    • 소프트웨어 인터럽트 : 인터럽트는 입출력장치에 의해 발생하기도 하지만 인터럽트를 발생시키는 특정 명령어에 의해 발생. 
  •  

운영체제의 핵심 서비스

  • 프로세스 관리
    • 프로세스 : 실행 중인 프로그램. 일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행가능하기 때문에 CPU는 프로세스들을 번갈아 가며 실행. 
  • 자원 접근 및 할당
    • CPU
      • CPU 스케줄링 : 운영체제는 프로세스들에 공정하게 CPU를 할당하기 위해 어떤 프로세스부터 CPU를 이용하게 할 것인지, 얼머나 오래 CPU를 이용하게 할지를 결정할 수 있어야 한다.
    • 메모리
      • 운영체제는 새로운 프로세스가 적재될 때마다 어느 주소에 적재해야 할지를 결정해야한다.
    • 입출력장치
      • 운영체제는 인터럽트를 처리하는 프로그램, 즉 인터럽트 서비스 루틴을 제공함으로써 입출력작업을 수행한다. 
  • 파일 시스템 관리

※ 좀 더 알아보기

  • 가상 머신 : 소프트웨어적으로 만들어낸 가상 컴퓨터. 가상머신을 설치하면 새로운 운영체제와 응용 프로그램을 설치하고 실행할 수 있다. 가상머신에 설치된 운영체제또한 사용자모드로 작동. 커널모드로 전환되어야함 => 가상화를 지원하는 CPU는 커널 모드와 사용자 모드 이외에 가상 머신을 위한 모드인 하이퍼 바이저 모드를 따로 둔다. 
  • 시스템 호출의 종류
  •  
종류 시스템 호출 설명
프로세스 관리 fork() 새 자식 프로세스 생성
execve() 프로세스 실행(메모리 공간을 새로운 프로그램의 내용으로 덮어씌움)
exit() 프로세스 종료
waitpid() 자식 프로세스가 종료할 때까지 대기
파일관리 open() 파일 열기
close() 파일 닫기
read() 파일 읽기
write() 파일 쓰기
stat() 파일 정보 획득
디렉터리 관리 chdir() 작업 디렉터리 변경
mkdir() 디렉터리 생성
rmdir() 비어 있는 디렉터리 삭제
파일 시스템 관리 mount() 파일시스템 마운트
umount() 파일 시스템 마운트 해제