데스크톱 컴퓨터나 노트북, 스마트폰에는 모두 운영체제가 설치되어 있다.
모든 프로그램은 하드웨어를 필요로 한다. 이때 프로그램 실행에 필요한 요소들을 가리켜 시스템 자원, 혹은 줄여서 자원이라 한다. 모든 프로그램은 실행되기 위해 반드시 자원이 필요하다.
실행할 프로그램에 필요한 자원을 할당하고 프로그램이 올바르게 실행되도록돕는 프로그램이 운영체제이다.
운영체제도 프로그램이다. ➡ 메모리에 적재되어야 한다.
응용 프로그램: 사요앚가 특정 목적을 위해 사용하는 일반적인 프로그램 (ex. 워드프로세서, 인터넷브라우저, 메모장, 게임 등과 같은 프로그램)
운영체제는 실행할 프로그램을 메모리에 적재하고, 더 이상 실행되지 않는 프로그램을 메모리에 삭제하며 지속적으로 메모리 자원을 관리한다. 또한 여러개의 응용프로그램이 실행되려면 CPU가 필요하다. 어느 한 프로그램이 CPU를 독점하면 다른 프로그램들은 올바르게 실행될 수 없기 때문에 운영체제는 최대한 공정하게 여러 프로그램에 CPU 자원을 할당한다.
또한 응용프로그램과 하드웨어 사이에서 응용 프로그램에 필요한 자원을 할당하고, 응용 프로그램이 올바르게 실행되도록 관리하는 역할을 한다. 운영체제는 관리할 자원별로 기능이 나누어져 있다. (ex. CPU, 메모리, 하드디스크 관리)
운영체제가 없다면 간단한 프로그램 동작시에도 하드웨어를 조작하는 코드를 개발자가 모두 직접 작성해야 한다. => 운영체제는 하드웨어를 조작하고 관리하는 기능들을 제공하기 때문에 개발자가 하드웨어 조작 코드를 직접 작성할 필요가 없다.
운영체제와의 대화로 하드웨어와 프로그램을 더 깊이 있게 이해하고 문제 해결의 실마리를 찾을 수 있다.
운영체제는 사용자를 위한 프로그램이 아닌 사용자가 실행하는 프로그램을 위한 프로그램이다. 즉, 사용자가 실행하는 응용 프로그램이 올바르게 실행되도록 돕고 필요한 자원을 할당해 주는 프로그램이다.
운영체제가 응용 프로그램에 제공하는 기능들 (운영체제 서비스)는 매우 다양하다.
운영체제가 응용 프로그램에 제공하는 서비스 종류는 다양하지만, 그중에서도 가장 핵심적인 서비스들이 있다.
운영체제의 핵심 서비스를 담당하는 부분을 커널이라고 한다.
운영체제가 설치된 모든 기기에는 커널이 있다. 어떤 커널을 사용하는지에 따라 컴퓨터 전체의 성능도 달라질 수 있다.
운영체제가 제공하는 서비스 중 커널에 포함되지 않는 서비스도 있다.
위와 같은 사용자 인터페이스는 운영체제가 제공하지만, 커널에 속한 기능은 아니다.
운영체제는 사용자가 실행하는 응용 프로그램이 하드웨어 자원에 직접 접근하는 것을 방지하여 자원을 보호한다. 응용 프로그램이 자원에 접근하기 위해서는 운영체제에 도움을 요청해야 한다. 응용 프로그램의 요청을 받은 운영체제는 응용 프로그램 대신 자원에 접근하여 요청한 작업을 수행한다.
이러한 운영체제의 역할은 이중 모드로써 구현된다. 이중 모드란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식이다.
CPU가 사용자 모드로 실행 중인지, 커널 모드로 실행중인지는 플래그 레지스터 속 슈퍼바이저 플래그를 보면 알 수 있다.
사용자 모드로 실행되는 프로그램이 자원 접근 운영체제 서비스 제공을 위해서는 운영체제 요청을 보내 커널 모드 전환이 필요하다. 이때 운영체제 서비스를 제공받기 위한 요청을 시스템 호출이라고 한다. 사용자 모드로 실행되는 프로그램은 시스템 호출을 통해 커널 모드로 전환하여 운영체제 서비스를 제공받을 수 있다.
시스템 호출은 일종의 인터럽트 이다. 인터럽트는 입출력장치에 의해 발생하기도 하지만 인터럽트를 발생시키는 특정 명령어에 의해 발생하기도 한다. -> 소프트웨어 인터럽트라고 한다.
시스템 호출 명령어 실행 시 CPU는 지금까지의 작업을 백업하고, 커널 영역 내에 시스템 호출을 수행하는 코드(인터럽트 서비스 루틴)을 실행한 뒤 다시 기존에 실행하던 응용 프로그램으로 복귀하여 실행을 계속해 나간다.
일반적으로 응용 프로그램은 실행 과정에서 운영체제 서비스들을 매우 빈번하게 이용한다. 그 과정에서 빈번하게 시스템 호출을 발생시키고 사용자 모드와 커널 모드를 오가며 실행한다.
실행 중인 프로그램은 프로세스 라고 한다. 하나의 CPU는 한번에 하나의 프로세스만 실행할 수 있기에 CPU는 이 프로세스들을 조금씩 번갈아가며 사용한다. (= 한 프로세스 실행하다가 다른 프로세스로 실행 전환, 반복)
이때 각 프로세스는 상태, 사용자원 모두 다양하다. 운영체제는 이러한 다양한 프로세스를 관리하고 실행해야 한다.
파일을 관리하는 파일 시스템도 운영체제가 지원하는 핵심 서비스이다.
시스템 호출의 종류
- 프로세스 관리:
fork()
,execve()
,exit()
,waitpid()
- 파일 관리:
open()
,clase()
,read()
,write()
,stat()
- 디렉터리 관리:
chdir()
,mkdir()
,rmdir()
- 파일 시스템 관리:
mount()
,umount()