운영체제에 들어가기에 앞서 모든 프로그램은 실행을 위해 자원을 필요로 합니다. 시스템 자원 즉, 자원(resource)는 프로그램 실행에 마땅히 필요한 요소들입니다. 자원의 종류에는 컴퓨터의 네가지 핵심 부품인 CPU,메모리, 보조기억장치, 입출력장치 등이 있습니다.
01. 운영체제란?
운영체제는 실행할 프로그램에 필요한 자원을 할당하고 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램입니다.
운영체제 역시 프로그램이므로 메모리 영역에 적재되는데, 커널영역에 적재됩니다.
메모리 내부에 커널영역이라고하는 특별한 영역에 적재되어 실행됩니다. 메모리는 크게 커널영역과 사용자 영역으로 나뉠 수 있습니다. 메모리 영역에서 커널 영역을 제외한 나머지 영역을 사용자 영역이라고 하는데 이 사용자 영역은 사용자가 이용하는 응용프로그램(application software)이 적재된 영역입니다.
여기서 application software는 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램으로 워드프로세서, 인터넷 브라우저, 메모장 등이 있습니다.
즉, 운영체제란 메모리 내부에 있는 커널 영역에 적재되어 사용자 영역에 적재된 프로그램들에게 자원을 할당해주고 이들이 올바르게 실행하도록 관리해주는 프로그램입니다.
운영체제 -> 정부로 비유
하드웨어 (컴퓨터의 자원 : CPU , 메모리, 하드디스크 등) -> 나라의 자원 비유
응용 프로그램 -> 국민
02. 운영체제를 알아야 하는 이유
운영체제는 사용자를 위한 프로그램이 아닌 프로그램을 위한 프로그램입니다. 그렇기때문에 프로그램을 만드는 개발자는 운영체제를 잘 알아야 합니다. 또한 운영체제 덕분에 개발자는 하드웨어를 조작하는 코드를 직접 작성할 필요가 없습니다. 또한 운영체제 역시 프로그램으로서 현재 하드웨어의 상태, 코드의 실행 상태, 문제 파악 등에 대한 내용을 사용자에게 알려주며 이를 통해 개발자는 문제 해결의 실마리를 찾을 수 있습니다.
결과적으로 운영체제와 대화를 통해 하드웨어와 프로그램을 더 깊이 이해할 수 있습니다.
03. Kernel
운영체제는 응용프로그램에게 어떤 도움을 주면서 서비스를 제공하게 될까요? 일단, 운영체제는 현존하는 프로그램 중 규모가 가장 큰 프로그램 중 하나입니다. 또 다양한 종류의 운영체제가 있습니다. 그렇기때문에 운영체제가 제공하는 기능은 다양합니다. 그러나 가장 핵심적인 서비스는 존재합니다. 예를 들면 자원에 접근하고 조작하는 기능, 프로그램이 올바르고 안전하게 실행되게 하는 기능 등등.. 이러한 운영체제의 핵심 서비스를 담당하는 부분을 커널(Kernel)이라고 합니다. 운영체체는 특별한 언급이 없는 한 커널을 지칭합니다. 그렇다면 운영체제에는 속하지만 커널에 속하지 않는 기능은 무엇이 있을까요 ? 바로 유저 인터페이스(UI ; User Interface) 기능이 있습니다. 이 인터페이스는 사용자와 컴퓨터 간의 통로일 뿐 운영체제의 핵심 기능(커널)은 아닙니다ㅋ
04. dual mode & system call
그렇다면 사용자가 실행하는 프로그램은 자원에 직접 접근할 수 있을까요? (응용프로그램 -> 하드웨어 )
직접 접근할 수 없고 직접 접근해도 안됩니다. 왜냐면 위험하기 때문입니다.
운영체제는 응용프로그램들이 자원에 접근하려 할 때 오직 자신을 통해서만 접근하도록 하여 자원을 보호합니다. 운영체제는 자원 접근을 대행하는 일종의 문지기인 셈 입니다. 응용프로그램이 자원에 접근하려면 운영체제에 도움을 요청해야합니다.
예를들어서 응용프로그램이 하드 디스크에 접근할 때는 운영체제를 통해서 하드웨어로 접근이 가능합니다. 이러한 문지기 역할은 이중모드(dual mode)로 구현합니다.
dual mode 란 CPU가 명령어를 실행하는 모드를 크게 사용자 모드(user mode)와 커널 모드(kernel mode)로 구분하는 방식입니다.
사용자모드(=user mode)는 일반적인 응용 프로그램 모드입니다. user mode로 실행중인 CPU는 입출력 명령어와 같이 하드웨어 자원에 접근하는 명령어를 실행할 수 없습니다. 그래서 user mode로 실행되는 일반적인 응용 프로그램은 자원에 접근할 수 없습니다.
[User mode]
- 운영체제 서비스를 제공받을 수 없는 실행 모드
- 커널 영역의 코드를 실행할 수 없는 실행 모드
- 자원 접근 불가
커널 모드는 운영체제 서비스를 제공받을 수 있는 실행모드 입니다. CPU가 커널 모드로 명령어를 실행하면 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있습니다. 운영체제는 kernel mode로 실행되기 때문에 자원에 접근할 수 있습니다.
[Kernel mode]
- 운영체제의 서비스를 제공받을 수 있는 실행 모드
- 자원 접근을 비롯한 모든 명령어 실행 가능
user mode로 실행되는 프로그램이 자원에 접근하는 운영체제 서비스를 제공받으려면 운영체제에 요청을 보내 kernel mode로 전환되어야 합니다. 이때 요청은 system call이라고 하는 일종의 인터럽트를 말합니다. user mode로 실행되는 프로그램은 system call을 통해 kernel mode로 전환하여 운영체제 서비스를 제공받을 수 있습니다.
시스템 콜이란 운영체제 서비스를 제공받기 위해 커널 모드로 전환하는 방법으로서 커널모드로 전환하여 실행하기 위해 호출됩니다. 시스템 콜은 일종의 소프트웨어 인터럽트로서 처리되는 방식은 하드웨어 인터럽트 처리방식과 유사합니다.
일반적으로 응용 프로그램은 실행 과정에서 운영체제 서비스를 빈번하게 이용합니다. 그 과정에서 빈번하게 시스템 콜을 발생시키고 user mode 와 kernel mode를 오가며 실행됩니다.
[슈퍼바이저 플래그 -> 커널모드로 실행중인지 사용자 모드로 실행중인지 확인]
05. 운영체제의 핵심 서비스
05-1. 프로세스 관리
프로세스란 메모리에 적재되어 실행중인 프로그램입니다. 일반적으로 하나의 CPU는 한 번에 하나의 프로세스만 실행할 수 있기 때문에 CPU는 이 프로세스들을 조금씩 번갈아가며 실행합니다. 하지만 사용자 입장에서는 너무 빠르게 번갈아 실행되어 동시에 실행되는 것처럼 보입니다. 이렇게 동시다발적으로 생성, 실행, 삭제되는 프로세스를 운영체제가 일목요연하게 관리합니다.
05-2. 자원 접근 및 할당
모든 프로세스는 실행을 위해 자원을 필요로 합니다. 그리고 운영체제는 프로세스들이 사용할 자원에 접근하고 조작함으로써 프로세스에 필요한 자원을 할당합니다. 이때 자원은 대표적으로 학습한 4가지 핵심부품(1. CPU,2. 메모리,3. 보조기억장치,4. 입출력장치) 입니다.
- 운영체제의 CPU 접근 및 할당
일반적으로 메모리에 여러 프로세스가 적재되고, 하나의 CPU는 한번에 하나의 프로세스만 실행할 수 있습니다. 그래서 하나의 프로세스가 CPU를 이용하고 있다면 다른 프로세스는 기다려야 합니다.
이에 운영체제는 프로세스들이 공정하게 CPU를 할당하기 위해 어떤 프로세스로부터 CPU를 이용하게 할 것인지, 얼마나 오래 CPU를 기다리게 할 것인지를 결정할 수 있어야 합니다. 이를 CPU 스케줄링 이라고 합니다.
- 운영체제의 메모리 접근 및 할당
메모리에 적재된 프로세스들은 크기나 주소가 가지각색입니다. 같은 프로세스라 할지라도 실행할때마다 메모리에 적재되는 주소가 달라질 수 있습니다. 따라서 운영체제는 새로운 프로세스가 적재될 때마다 어느 주소에 적재할 지 결정해야 합니다.
- 운영체제의 입출력장치 접근 및 할당
인터럽트 서비스 루틴은 운영체제가 제공하는 기능으로 커널 영역에 있습니다. 입출력 장치가 발생시키는 하드웨어 인터럽트도 마찬가지 입니다. 입출력 장치가 CPU에 하드웨어 인터럽트 요청 신호를 보내면 CPU는 하던 일을 잠시 백업한 뒤 커널 영역에 있는 인터럽트 서비스 루틴을 실행합니다.
결국 운영체제는 인터럽트를 처리하는 프로그램, 즉 인터럽트 서비스 루틴을 제공함으로써 입출력 작업을 수행합니다.
05-3. 파일 시스템 관리
운영체제는 관련된 정보를 파일이라는 단위로 저장장치에 보관하고 이 파일들을 묶어 폴더(디렉토리) 단위로 저장장치에 보관합니다. 파일 시스템 관리도 운영체제가 지원하는 핵심 서비스입니다.
본 글은 인프런의 [혼자공부하는 컴퓨터 구조 + 운영체제 ] 인강을 참고하였습니다.
https://inf.run/W32w
'CS > 운영체제' 카테고리의 다른 글
[운영체제]CPU 스케줄링 (0) | 2023.08.21 |
---|---|
[운영체제] 프로세스와 스레드 (0) | 2023.08.19 |
[컴퓨터구조]입출력장치 [I/O device] (0) | 2023.08.18 |
[컴퓨터구조]CPU의 성능향상기법 (0) | 2023.08.14 |
[컴퓨터구조] CPU의 작동원리 (0) | 2023.08.11 |