2024. 4. 24. 17:55ㆍCS/운영체제
프로그램 실행에 마땅히 필요한 요소들을 시스템 자원 줄여서 자원이라고 한다.
CPU, 메모리, 보조기억장치, 입출력장치 등이 프로그램 실행에 필요한 자원인 것이다.
이렇게 실행할 프로그램에게 필요한 자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 프로그램이 운영체제이다.
운영체제는 프로그램의 실행을 돕는 프로그램이기 때문에 다른 프로그램과 마찬가지로 메모리에 적재된다.
이때 운영체제는 커널 영역에 적재된다. 커널 영역을 제외한 나머지 영역을 사용자 영역이라고 하는데 운영체제는 커널 영역에 적재되어 사용자 영역에 적재된 응용 프로그램에게 자원을 할당하고 이들이 올바르게 실행되도록 돕는다.
요약하면 운영체제는 응용 프로그램과 하드웨어 사이에서 응용 프로그램에게 필요한 자원을 할당하고 응용 프로그램이 올바르게 실행되도록 관리하는 역할을 한다.
커널
운영체제라는 프로그램이 제공하는 핵심 서비스는 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능이다. 이러한 운영체제의 핵심 서비스를 커널이라고 한다.
운영체제가 제공하는 서비스이지만 커널에 포함되지 않는 서비스도 있다. UI가 대표적이다. GUI와 CLI는 컴퓨터와 상호작용하기 위한 통로일 뿐 커널에 속한 기능은 아니다.
커널의 역할은 I/O를 제어하고 CPU와 메모리 자원을 제어한다. 그리고 다른 프로세스가 자신의 메모리 공간에 침범하는 것을 막는다.
이중모드와 시스템 콜
운영체제는 응용 프로그램들이 자원에 접근하려고 할 때 오직 자신을 통해서만 접근하도록 하여 자원을 보호한다.
응용 프로그램이 자원에 접근하기 위해서는 운영체제 코드를 실행해야한다.
아래 그림과 같이 어떤 응용 프로그램이 하드디스크에 무언가를 저장하고 싶을 때는 운영체제에게 요청을 보내고 운영체제 내부의 하드 디스크 저장코드를 실행시킴으로써 하드디스크에 데이터를 저장할 수 있다.
이러한 운영체제의 역할은 이중모드를 통해 구현된다.
이중모드는 사용자모드와 커널모드로 구분되고 이 모드의 대상은 CPU이다.
사용자모드는 운영체제의 서비스를 제공받을 수 없는 실행모드 즉, 커널 영역의 코드를 실행할 수 없는 모드다.
CPU가 사용자모드로 실행중이라면 입출력 명령어와 같이 하드웨어 자원에 접근하는 명령어를 실행할 수 없다.
반면 커널모드는 커널 영역의 코드를 실행할 수 있는 모드이다. 운영체제는 커널모드로 실행된다.
CPU가 사용자모드로 실행중인지, 커널모드로 실행중인지에 대한 정보는 플래그 레지스터의 슈퍼바이저 플래그에 명시되어있다.
그렇다면 사용자 모드로 실행되는 프로그램이 자원에 접근하는 운영체제의 서비스를 받기 위해서 커널 모드로 전환되어야 한다.
사용자 모드로 실행되는 프로그램은 시스템 콜을 통해 커널 모드로 전환하여 운영체제 서비스를 제공받을 수 있다.
시스템 콜은 일종의 인터럽트이다. 이러한 인터럽트를 소프트웨어 인터럽트라고 한다.
User mode와 Kernel mode 그림으로 이해하기
Hello World를 출력하는 프로그램이 있다. 이 프로그램을 실행하면 어떤 과정을 거쳐 모니터에 출력되는 것일까?
우선 프로그램이 실행되면 프로세스의 형태로 존재하게 된다.
이 프로세스는 printf와 같은 API를 통해 파일 형태의 인터페이스에 I/O접근을 할 수 있다.
즉, 프로세스가 커널 모드에 접근하기 위해서는 반드시 인터페이스를 거쳐야한다. 그리고 인터페이스는 파일의 형태이기 때문에 읽거나 쓰거나 실행하는 것이 가능하다. 이렇게 인터페이스를 통해 커널모드로 진입하는 것을 시스템 콜이라고 한다.
이제 커널모드에 진입했으면 커널 영역에 구현된 구성 요소의 소프트웨어로 접근하게 된다. 만약 파일을 읽거나 로드하는 프로그램이라면 이 구성요소는 파일 시스템이 된다.
그리고 드라이버 소프트웨어를 통해 하드웨어의 제어가 가능하고 결과적으로 디바이스에 연결된 모니터로 프로그램의 실행결과가 출력된다.
추가적으로 구성 요소와 드라이버 사이에는 필터가 존재하여 실시간 I/O를 모니터링한다.
'CS > 운영체제' 카테고리의 다른 글
CPU 스케줄링 알고리즘 (2) | 2024.05.02 |
---|---|
CPU 스케줄링 개요 (0) | 2024.05.02 |
스레드 (0) | 2024.05.02 |
프로세스 상태와 계층 구조 (0) | 2024.05.01 |
프로세스 개요 (0) | 2024.04.27 |