본문 바로가기

Computer Science/운영체제

운영체제 - 운영체제란

모든 프로그램은 하드웨어를 필요로 합니다. 계산하는 프로그램은 CPU를 필요로 하고, 이미지를 하드 디스크에 저장하는 프로그램은 하드 디스크를 필요로 합니다.

 

이때 프로그램 실행에 필요한 요소들을 시스템 자원이라고 합니다. CPU, 메모리, 보조기억장치, 입출력장치 등 모두 시스템 자원이라고 볼 수 있습니다.

 

운영체제(OS; Operating System)

:  시스템 자원과 프로세스 및 저장 장치 관리, 디바이스 드라이버 역할 등을 수행하는 특별한 프로그램이 운영체제(operating system)입니다.

 

운영체제 또한 프로그램이기 때문에 메모리에 적재되어야 합니다. 다만, 운영체제는 다른 프로그램들과는 다르게 컴퓨터가 부팅될 때 메모리 내 커널 영역(kernel space)에 적재됩니다. 커널 영역을 제외한 응용 프로그램이 적재되는 영역은 사용자 영역(user space)라고 합니다.

  • 운영체제는 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램은 메모리에서 삭제하며 메모리 자원을 관리합니다.
  • 어떤 프로그램부터 CPU를 사용하게 할지, 얼마나 오랫동안 사용하게 할지 결정합니다.
  • 여러 응용 프로그램이 동시에 입출력장치에 접근하는 것을 막아 하나의 장치가 사용하는 동안 다른 장치는 기다리게 만들어 하드웨어 자원을 관리합니다.

이처럼 운영체제는 응용 프로그램과 하드웨어 사이에서 자원을 효율적으로 관리하는 역할을 합니다.

 

커널(kernel) 

: 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 운영체제의 핵심 서비스입니다.

운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스도 있는데, 대표적으로 사용자 인터페이스(UI; User Interface)가 있습니다. 사용자 인터페이스에는 그래픽 유저 인터페이스(GUI; Graphical User Interface)와 커맨드 라인 인터페이스(CLI; Command Line Interface)가 있습니다.

 

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

 

이중 모드(dual mode)

: CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식입니다.

  • 사용자 모드(user mode) : 운영체제 서비스를 제공받을 수 없는 실행 모드입니다. 즉, 커널 영역의 코드를 실행할 수 없는 모드입니다. 일반적으로 응용 프로그램은 사용자 모드로 실행됩니다. 사용자 모드로 실행 중인 CPU는 입출력 명령어와 같이 하드웨어 자원에 접근하는 명령어를 실행할 수 없습니다.
  • 커널 모드(kernel mode) : 운영체제 서비스를 제공받을 수 있는 실행 모드입니다. 즉, 커널 영역의 코드를 실행할 수 있는 모드입니다. CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있습니다.

CPU가 사용자 모드로 실행 중인지, 커널 모드로 실행 중인지는 플래그 레지스터 속 슈퍼바이저 플래그를 통해서 확인할 수 있습니다.

 

시스템 호출(system call)

: 일종의 소프트웨어 인터럽트로, 사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받기 위해서 운영체제에 보내는 요청입니다. 사용자 모드로 실행되는 프로그램은 시스템 호출을 통해 커널 모드로 전환하여 운영체제 서비스를 제공받을 수 있습니다.

 

 

운영체제의 핵심 서비스

 

  • 프로세스 관리

메모리에 적재되어 실행 중인 프로그램을 프로세스라고 합니다. 일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있기에 CPU는 이 프로세스들을 조금씩 번갈아 가며 실행합니다. 이때 각 프로세스는 상태, 사용하고자 하는 자원이 다양합니다. 또한 당장 실행할 수 있는 프로세스가 있고, 그럴 수 없는 프로세스도 있습니다.

 

그래서 운영체제는 다양한 프로세스를 일목요연하게 관리하고 실행할 수 있어야 합니다. 또한 여러 프로세스가 동시에 실행되는 환경에서 프로세스 동기화가 필수적이고, 교착 상태를 해결해야 합니다.

  • 자원 접근 및 할당

모든 프로세스는 실행을 위해 자원을 필요로 합니다. 이에 운영체제는 프로세스들이 사용할 자원에 접근하고 조작함으로써 프로세스에 필요한 자원을 할당해 줍니다.

 

1. CPU : 일반적으로 메모리에는 여러 프로세스가 적재되고, 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있습니다. 그래서 하나의 프로세스가 CPU를 이용하고 있다면 다른 프로세스는 기다려야 합니다. 이에 운영체제는 프로세스들에 공정하게 CPU를 할당하기 위해 어떤 프로세스부터 CPU를 할당해줄지, 얼마나 오래 할당해줄지를 결정할 수 있어야 합니다. 이를 CPU 스케줄링이라고 합니다.

 

2. 메모리 : 메모리에 적재된 프로세스들은 크기도, 적재되는 주소도 다양합니다. 같은 프로세스라도 메모리에 적재될 때마다 주소 또한 달라집니다. 이에 운영체제는 새로운 프로세스가 메모리가 적재될 때 어느 주소에 적재해야 할지를 결정해야 합니다. 때로는 메모리가 이미 꽉 차 있어 꼭 실행해야 할 프로세스를 적재할 공간이 없는 경우, 메모리에 공간이 남았는데도 프로세스를 적재하지 못하는 상황이 있는데, 이를 극복할 수도 있어야 합니다.

 

3. 입출력장치 : 인터럽트 서비스 루틴은 운영체제가 제공하는 기능으로 커널 영역에 있습니다. 입출력장치가 발생시키는 하드웨어 인터럽트도 마찬가지입니다. 입출력장치가 CPU에 하드웨어 인터럽트 요청 신호를 보내면 CPU는 하던 일을 잠시 백업한 뒤 인터럽트 서비스 루틴을 실행합니다.

 

  • 파일 시스템 관리

여러 파일을 열고, 생성하고, 삭제, 그리고 이 파일들을 한데 묶어 디렉터리(폴더)로 관리하는 파일 시스템도 운영체제가 지원하는 핵심 서비스입니다.