
운영체제
- 모든 프로그램은 실행을 위해 자원을 필요로 함
- 자원 : 프로그램 실행에 있어 마땅히 필요한 요소들
(컴퓨터의 4가지 핵심 부품 포함 - CPU, 주기억장치, 보조기억장치, 입출력장치)
- 자원 : 프로그램 실행에 있어 마땅히 필요한 요소들
운영체제란?


- 실행할 프로그램에 필요한 자원을 할당하고
- 프로그램이 올바르게 실행되도록 돕는 특별한 프로그램


- 실행되고 있는 프로그램은 메모리에 적재되기 때문에 운영체제도 메모리에 적재되어 있음
- 다만 중요한 프로그램이기 때문에 "커널 영역"이라는 곳에 적재되어 있음
- 커널은 운영체제의 핵심 기능을 담당함

대부분의 전공서에서 운영체제는 커널을 이야기 함 - 우리가 일반적으로 사용하는 응용 프로그램은 사용자 영역에 적재됨
- 응용 프로그램 (application software)
- 사용자가 특정 목적을 위해 사용하는 일반적인 프로그램
- 메모장, 게임 등등..
- 응용 프로그램 (application software)
- 운영체제에는 속하는데 커널에는 속하지 않는 부분도 있음
- 유저 인터페이스(UI, User Interface) : 터치 혹은 마우스 등으로 사용자와 상호작용하는 통로
- 커맨드 라인 인터페이스 : 명령어로 접근하는 인터페이스
- 사용자와 컴퓨터 간의 통로일 뿐 운영체제의 핵심 기능(커널)은 아님


이중모드와 시스템 호출
- 사용자가 실행하는 프로그램은 자원에 직접 접근할 수 있을까? NO
- 자원에 직접 접근하는 것은 위험함
- 그러므로 일반적인 응용프로그램은 자원에 직접 접근할 수 없음

- 운영체제는 응용프로그램들이 자원에 접근하려고 할 때 오직 자신을 통해서만 접근하도록 하여 자원을 보호함
- 일종의 문지기 역할
- 응용 프로그램이 자원에 접근하려면 운영 체제에게 도움을 요청해야 함
= 운영 체제의 코드를 실행해야 함


이중 모드
- CPU가 명령어를 실행하는 모드를 크게 사용자 모드와 커널 모드로 구분하는 방식
- 사용자 모드
- 운영체제 서비스를 제공받을 수 없는 실행 모드
- 커널 영역의 코드를 실행할 수 없는 실행 모드
- 자원 접근 불가
- 운영 체제의 도움 없이 실행될 수 있는 실행 모드
- 커널 모드
- 운영체제의 서비스를 제공받을 수 있는 실행 모드
- 자원 접근을 비롯한 모든 명령어 실행 가능
- 플래그 레지스터 안에 슈퍼바이저 플래그로 [커널모드 / 사용자모드] 구분
- 이걸 이용해 운영체제가 자원 접근을 대행하고 자원을 보호해줌

- 예를 들어 입출력장치에 접근하는 명령어를 실행해야 하면, 자원에 접근해야 하기 때문에 커널모드로 실행되어야 함

시스템 호출
- 운영체제 서비스를 제공받기 위해 커널모드로 전환하는 방법
- 일종의 소프트웨어 인터럽트
- print()와 같은 프로그래밍 언어의 문법도 내부적으로는 이런 시스템 호출을 통해 실행


- 일종의 소프트웨어 인터럽트이기 때문에 시스템 호출이 처리되는 방식은 하드웨어 인터럽트 처리 방식과 유사함

- 응용프로그램이 자원에 빈번하게 접근하기 때문에 시스템 호출도 아주 자주 일어남
- 아래와 같이 커널모드와 사용자 모드를 번갈아가며 실행함

운영체제의 핵심 서비스
1. 프로세스 관리
- 프로세스 == 실행 중인 프로그램
- 수많은 프로세스들이 동시에 실행
- 운영체제는 현재 메모리에 적재되서 동시에 실행되고 있는 여러 프로세스들을 관리해줌

- 동시에 실행이라고는 하지만, 실제로는 사용자가 눈치채지 못할 정도로 빠르게 번갈아가면서 실행됨
- 운영체제는 동시다발적으로 생성되고 실행되고 삭제되는 다양한 프로세스들을 일목요연하게 관리할 수 있어야 함
- 프로세스와 스레드, 프로세스 동기화, 교착상태 해결 등... 뒤에서 배울 것들


2. 자원 접근 및 할당
CPU / 메모리 / 입출력장치
CPU 스케줄링
: 어떤 프로세스를 먼저, 얼마나 오래 실행할지 결정
- CPU는 명령어를 실행해주는 부품. 그렇기 때문에 모든 프로세스는 실행되려면 CPU를 할당받아서 실행해야 하는데, 너무 다양한 프로세스들이 동시에 실행되고 있으므로 운영체제가 이걸 조율해줌

- 여러프로그램을 동시에 실행할 때 그 시간 단위를 아주 미세하게잘라보면,
사용자가 인지하지 못할 정도로 빠르게 번갈아 가면서 프로그램을 실행하는 것 - 이처럼 여러가지 프로그램을 동시에 실행시킬 때
어떤 프로그램을 먼저 실행할지, 어떤 프로그램이 얼마나 오랫동안 CPU를 점유해서 실행될 것인지 등을 운영체제가 결정해 줌

메모리 (페이징, 스와핑)
- 메모리의 비어있는 공간에 프로그램을 적재해주고,
반대로 사용하지 않는 프로그램이 있다면 메모리에서 삭제하는 역할 - 실행하려는 프로세스가 메모리보다 큰 경우에도 실행가능하도록 처리


입출력장치
- 하드웨어 인터롭트에서 이야기했던 인터롭트 서비스 루틴은 운영체제가 제공해주는 기능
- 응용 프로그램이 입출력 장치에 접근하고자 할 때, 어떤 입출력 장치를 할당받아서 실행되고자 할 때 운영체제는 인터럽트 서비스 루틴을 제공함으로써 각각의 응용프로그램한테 입출력 장치를 접근할 수 있도록 할당함
- 프린터와 같이 한 번에 하나의 프로세스만 접근 가능한 하드웨어가 있을 때 그 순서를 관리해줌

3. 파일 시스템 관리
- 관련된 정보를 파일이라는 단위로 저장 장치에 보관
- 파일들을 묶어 폴더(디렉터리) 단위로 저장 장치에 보관
- 즉, 보조기억 장치에 있는 정보들을 파일과 폴더로 묶어서 관리
운영체제를 공부해야 하는 이유

- 운영체제는 우리가 실행하는 응용 프로그램과 하드웨어 사이를 연결 지어주는 다리 같은 프로그램
- 하드웨어와 가까운 곳에 위치함으로써
이 프로그램들이 요구하는 자원을 할당해주고 올바르게 실행되도록 돕는 특별한 프로그램
운영체제가 없다면...
- 하드웨어에 직접 접근하고 조작하는 코드를 개발자가 하나하나 일일이 만들어야 함
- print() 이런것도 모두 운영체제의 도움을 받아 실행되는 함수들
- 운영체제가 있으니, 하드웨어와 프로그램 사이에 있기때문에 하드웨어에 접근하고 싶다면
직접적으로 하드웨어에 접근하는 코드가 필요한게 아니라
그 파일을 생성하고 파일에 접근하는 운영체제의 코드를 실행하면 됨
운영체제를 알아야 하는 이유
- 운영체제는 프로그램을 위한 프로그램
- 그러므로 프로그램을 만드는 개발자는 운영체제를 알아야 함
- 만약 프로그램에 어떤 문제가 발생한다면 그걸 가장 먼저 알아채리는 것은 운영체제임
- 대부분의 에러메시지도 운영체제가 만들어주는 것
- 그러므로 운영체제를 알면 오류 메시지에 대한 깊은 이해를 할 수 있게 되어 문제 해결 능력이 향상됨
출처 : 혼자 공부하는 컴퓨터구조 + 운영체제 (저자 강민철)
'취업역량강화 > 컴퓨터공학' 카테고리의 다른 글
| [운영체제] 파이썬으로 프로세스와 스레드 다루기 (0) | 2026.02.15 |
|---|---|
| [운영체제] 프로세스와 스레드 (0) | 2026.02.13 |
| [컴퓨터 구조] 입출력 장치(장치 컨트롤러와 장치 드라이버, 다양한 입출력 방법) (0) | 2026.02.09 |
| [컴퓨터 구조] 보조기억장치 (보조기억장치, RAID의 정의와 종류) (0) | 2026.02.07 |
| [컴퓨터 구조] 메모리와 캐시메모리(RAM의 특징과 종류, 주소 공간, 캐시 메모리) (0) | 2026.02.05 |