운영체제 - 기초
운영체제란
모든 프로그램은 하드웨어를 필요로 한다. CPU, 하드 디스크 같이 프로그램 실행에 필요한 요소들을 가리켜 시스템 자원 혹은 자원이라고한다. CPU, 메모리, 보조기억장치, 입출력장치 등과 같은 컴퓨터 부품들은 모두 자원이라고하며, 모든 프로그램이 실행되기 위해 반드시 필요하다. 실행할 프로그램에 필요한 자원을 할당하고, 프로그램이 올바르게 실행되도록 돕는 프로그램을 운영체제라고 한다.
운영체제 또한 같은 프로그램으로, 여느 프로그램들처럼 메모리에 적재되어야 한다. 하지만 다른 프로그램들과는 다르게 컴퓨터를 부팅할 때 커널 영역(kernel space)이라는 공간에 적재되어 실행된다. 커널영역 이외에 사용자가 이용하는 응용 프로그램이 적재되는 영역은 사용자 영역(user space)라고 한다.
- 운영체제는 위의 예시와 같이 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에서 삭제하며 지속적으로 메모리 자원을 관리한다.
- 운영체제는 최대한 공정하게 여러 프로그램에 CPU 자원을 할당한다.
정리하면, 운영체제는 응용 프로그램과 하드웨어 사이에서 응용 프로그램에 필요한 자원을 할당하고, 올바르게 실행되도록 관리하는 역할을 한다.
커널
운영체제가 응용프로그램에 제공하는 서비스 종류는 다양하지만, 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능이 운영체제의 핵심 서비스이다. 운영체제의 이러한 핵심 서비스를 담당하는 부분을 커널(kernel)이라고 한다. 운영체제가 설치된 모든 기기에는 이 커널이 존재한다.
이중 모드와 시스템 호출
운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다. 그래서 응용 프로그램의 요청을 받은 운영체제가 응용 프로그램 대신 자원에 접근하여 요청한 작업을 수행한다.
- 이중 모드 dual mode
- CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다.
- 사용자 모드(user mode)
- 운영체제 서비스를 제공받을 수 없는 모드로, 커널 영역의 코드를 실행할 수 없는 모드이다.
- 사용자 모드로 실행되는 응용 프로그램은 자원에 접근할 수 없다.
- 커널 모드(kernel mode)
- 운영체제 서비스를 제공받을 수 있는 모드로, 커널 영역의 코드를 실행할 수 있는 모드이다.
- CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있다.
- 사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 커널 모드로 전환되어야 한다. 이때, 운영체제 서비스를 제공받기 위한 요청을 시스템 호출(system call)이라고 한다.
- 시스템 호출 처리 순서
- 시스템 호출은 소프트웨어적인 인터럽트이기 때문에, 인터럽트 처리 순서와 유사하다.
- 시스템 호출 예시 ) 하드 디스크에 데이터 저장
- 1. 하드 디스크에 데이터를 저장하는 시스템 호출 발생시켜 커널 모드로 전환
- 2. 운영체제 내의 '하드 디스크에 데이터를 저장하는 코드' 실행시켜 하드 디스크에 접근
- 3. 사용자 모드로 복귀하여 다시 실행
- 시스템 호출 처리 순서
운영체제의 핵심 서비스
프로세스 관리
운영체제는 다양한 프로세스를 일목요연하게 관리하고 실행하고, '교착 상태'를 해결한다.
자원 접근 및 할당
운영체제는 프로세스들이 사용할 자원에 접근하고 조작함으로써 프로세서에 필요한 자원을 할당한다.
- CPU
- 프로세스들에 공정하게 CPU를 할당하기 위해 어떤 프로세스부터 CPU를 이용하게 하고, 얼마나 이용할지를 결정한다.
- CPU 스케쥴링
- 메모리
- 새로운 프로세스가 적재될 때마다 어느 주소에 적재할지를 결정한다.
- 입출력장치
- 인터럽트가 처리하는 프로그램을 제공함으로써 입출력 작업을 수행한다.
파일 시스템 관리
운영체제는 파일 시스템을 관리한다.