본 글은 '이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접' 책을 읽고 정리한 글입니다.
운영체제란?
운영체제(OS: Operating System)는 하드웨어 위에 설치되어, 하드웨어 계층과 다른 소프트웨어 계층을 연결하는 소프트웨어 계층이다. 또한, 컴퓨터 자원을 효율적으로 관리하기 위한 시스템으로, 사용자가 컴퓨터를 사용할 수 있는 환경을 제공하는 역할을 한다.
만약 운영체제가 컴퓨터에 탑재되어있지 않다면, 우리가 컴퓨터를 이용해서 사용하는 모든 기본적인 프로그램들을 사용할 수 없을 것이다. `ex. Excel`
대표적인 OS로는 윈도우, 맥OS, 리눅스, 유닉스가 있다.
운영체제의 구조
운영체제는 커널과 인터페이스로 구성되어 있다.
커널
커널은 운영체제의 핵심 요소로,
하드웨어의 자원을 직접 관리하고, 응용 프로그램이 자원을 사용할 수 있도록 중재하는 역할을 한다.
인터페이스
인터페이스는 사용자와 OS 간의 다리라고 할 수 있다.
OS는 사용자와 직접 소통을 하지 않기 때문에, 사용자 인터페이스(UI) 또는 시스템 인터페이스가 중간 역할을 한다.
운영체제의 목적
CPU, 메모리 같은 컴퓨터 자원은 제한적이라서 이러한 자원을 관리하는 것이 매우 중요하다. OS는 다음 4가지 목적이 있다.
- 처리 능력 향상 : 일정 시간 내 시스템이 처리하는 일의 양을 향상
- 반환 시간 단축 : 사용자가 요청한 작업을 완료할 때까지 소요되는 시간 단축
- 사용 가능도 향상 : 사용자가 컴퓨터를 사용해야할 때 즉시 사용할 수 있도록 함 (얼마나 빨리 제공 가능한지)
- 신뢰도 향상 : 입력 값에 대한 정확한 값을 반환
이처럼 OS는 한정된 자원 안에서 정확하고 빠르게 주어진 문제를 해결하는 것이 목적이다. 그래서 위 4가지가 OS 성능을 평가하는 기준이 되기도 한다.
운영체제의 역할
운영체제는 사용자가 컴퓨터를 사용할 수 있는 환경을 제공하는 역할을 한다고 했다.
근데 ‘사용자가 컴퓨터를 사용할 수 있는 환경’이란 뭘까?
컴퓨터를 이용해서 크롬이라는 프로그램을 실행하려 했을 때 사람이 보기에는 창이 켜지는게 끝이지만, 이렇게 창이 켜지기 위해서는 운영체제가 프로그램을 실행하라는 명령을 받고, 실행 파일을 로드하는 등 . . 이런 과정을 거치고 있다는 것이다.
이처럼 운영체제는 사람이 접근하기 어려운 하드웨어에 접근하여 컴퓨터를 사용할 수 있도록 도와주는 역할을 한다.
운영체제의 핵심 기능은 1. 자원 할당 및 관리, 2. 프로세스 및 스레드 관리 이다.
자원 할당 및 관리
CPU 관리: CPU 스케줄링
CPU는 한정된 자원이기 때문에 한 프로그램이 CPU를 할당받아 사용하기 위해서는 다른 프로그램의 CPU 사용이 끝날 때까지 기다려야 한다. 그래서 운영체제는 CPU의 할당 순서와 사용 시간을 결정하는데, 이를 CPU 스케줄링이라고 한다.
메모리 관리: 가상 메모리
운영체제는 새롭게 실행되는 프로그램마다 사용할 메모리 공간을 할당하고, 종료된 프로그램을 메모리에서 삭제하여 메모리 낭비를 방지한다. 이를 위해 운영체제는 가상 메모리 기술을 활용한다.
가상 메모리는 실제 물리적인 메모리 크기보다 더 큰 메모리를 이용할 수 있도록 하는 기술이다.
파일/디렉터리 관리: 파일 시스템
파일 시스템은 보조기억장치 내의 정보를 파일 및 폴더 단위로 접근/관리할 수 있도록 하는 운영체제 내부 프로그램이다. OS는 보조기억장치를 효율적으로 관리하기 위해 파일 시스템을 활용한다.
프로세스 및 스레드 관리
프로세스는 실행 중인 프로그램을 말하며, 스레드는 프로세스를 이루는 실행의 단위를 말한다. 우리가 컴퓨터를 이용해서 크롬, 사파리 등 여러 프로그램을 실행할 수 있는데 이 각 프로그램이 모두 프로세스라고 할 수 있다.
이처럼 메모리에는 여러 프로세스가 적재될 수 있는데, 운영체제는 이 프로세스에 자원을 할당하고 스레드는 할당받은 자원으로 프로세스의 작업을 수행한다.
운영체제는 이러한 프로세스와 스레드의 실행 순서를 제어하고, 프로세스와 스레드가 요구하는 자원을 적절히 배분해야 한다.
시스템 콜과 이중 모드
메모리는 커널 영역과 사용자 영역으로 구분되며, 운영체제는 커널 영역에 적재되고 응용 프로그램은 사용자 영역에 적재된다.
그런데, 커널 영역은 보호된 공간이므로 응용 프로그램은 커널 영역에 직접 접근할 수 없다.
운영체제의 목적과 역할에 대해 쭉 봤을 때, 응용 프로그램을 실행하고 원하는 기능을 사용하기 위해서는 운영체제가 꼭 필요하다. 하지만 그 역할을 운영체제가 자동으로 수행하는 것이 아니라 응용 프로그램이 이거 해줘! 라고 하면 들어주는 역할만 수행할 뿐이다.
이 말은 즉, 응용 프로그램이 운영체제에 무언가를 요청하기 위해서는 접근 불가능하다고 했던 커널 영역에 접근할 수 있어야 한다.
커널 영역에 어떻게 접근하지?
이를 위해 운영체제는 커널 모드와 사용자 모드로 나눈다.
커널 모드에서는 하드웨어에 직접 접근하여 CPU, 메모리같은 자원을 사용할 수 있지만, 사용자 모드는 접근이 제한된다.
그럼 커널 영역에 접근하려면 커널 모드면 되는거네 ??
기본적으로 응용 프로그램은 사용자 모드에서 실행되고, 커널 모드로 전환하기 위해 사용하는 것이 시스템 콜(System call)이다.
그 전에! 인터럽트(Interrupt)라는 개념을 알아야 한다.
인터럽트
인터럽트는 현재 실행 중인 작업을 잠시 멈추고, 운영체제가 개입할 수 있도록 CPU의 흐름을 바꾸는 방법이다.
'Interrupt' 라는 용어에 맞게, 현재 진행 중인 작업을 방해한다고 이해하면 될 것 같다.
인터럽트가 발생하면 진행 중이던 작업을 멈추고 다른 일을 먼저 처리한 후, 이전 작업을 다시 이어간다.
시스템 콜도 인터럽트의 일종이라고 할 수 있다.
그럼 이제 다시 시스템 콜을 이용하여 어떻게 커널 모드로 전환을 하는지 보자!
시스템 콜
시스템 콜은 응용 프로그램이 운영체제의 기능을 요청하는 인터페이스 함수이다.
시스템 콜의 호출을 통해 커널 모드로 전환할 수 있다.
시스템 콜 예시)
- `open()` : 파일 열기
- `write()` : 파일 쓰기
- `fork()` : 새 자식 프로세스 생성
- `exit()` : 프로세스 종료
사용자 모드 <-> 커널 모드
사용자 모드와 커널 모드 사이의 전환은 다음과 같다.
[1] 응용 프로그램 실행 중 (사용자 모드)
↓
[2] 시스템 콜 호출 (ex. write())
↓
[3] 커널로 진입하는 명령 실행
↓
[4] 커널 모드로 전환
↓
[5] 운영체제가 요청 처리 (ex. 파일에 데이터 쓰기)
↓
[6] 작업 완료 후 다시 사용자 모드로 복귀
↓
[7] 응용 프로그램으로 복귀
마무리
정리를 해보자면
1. 운영체제는 컴퓨터의 응용 프로그램을 사용할 수 있도록 하는 소프트웨어이며,
2. 한정된 메모리 영역을 CPU가 효율적으로 사용할 수 있도록 관리하는 역할을 하고,
3. 그러한 운영체제의 기능을 사용하기 위해서는 커널 모드 상태로 커널 영역에 접근해야 한다. (운영체제가 커널 영역에 적재되어있음)
4. 커널 모드로 전환하기 위해서 사용하는건 시스템 콜이다.
스터디 2주차에 1주차 내용 정리하기 : >>
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 5. 가상 메모리 (1) | 2025.05.01 |
---|---|
[운영체제] 4. CPU 스케줄링 (0) | 2025.04.19 |
[운영체제] 3. 동기화와 교착 상태 (0) | 2025.04.16 |
[운영체제] 2. 프로세스와 스레드 (0) | 2025.04.08 |