
운영체제는 컴퓨터 하드웨어 위에서 동작하는 중간 관리자이다.
예를 들어,
hello프로그램을 실행하면 이 프로그램이 직접 키보드, 디스플레이, 하드디스크 같은 하드웨어를 직접 제어하지 않는다.→ 운영체제(OS)가 하드웨어와 프로그램 사이에서 중간다리 역할을 하기 때문이다.
운영체제의 주요 목적은 다음 두 가지이다.
→ 운영체제는 이 두가지 목표를 근본적인 추상화를 통해 달성하고 있다.
🧐 여기서 말하는 추상화(abstraction)란,
복잡하고 다양한 하드웨어의 세부 동작을 숨기고, 프로그래머가 단순한 인터페이스만 사용하게 만드는 개념이다.
🙋🏻♀️ 예를 들어, 컴퓨터 전원 버튼을 눌렀을 때내부적으로는 전력 공급, 부팅, BIOS 초기화, OS 로딩 등 복잡한 과정이 진행되지만, 우리는 단순히 “버튼을 누르면 컴퓨터가 켜진다”고 인식한다. 이처럼 복잡한 내부 과정을 감추고, 핵심 기능만 사용자에게 보여주는 것이 추상화이다.
우리가 hello 프로그램을 실행하면,
그 프로그램이 CPU, 메모리, 키보드 같은 장치들을 전부 혼자 쓰는 것처럼 보인다.
하지만 실제로는 여러 프로그램이 같은 컴퓨터 자원을 함께 사용하고 있고,
운영체제(OS)가 순서를 정해가며 공평하게 나눠 쓰게 만들어주는 것이다.
🙋🏻♀️ 마치 요리사가 손님 4명의 요리를 하나씩 완성하지 않고, 조금씩 나눠가며 조리해서 손님 모두가 자기 요리가 계속 진행되고 있다고 느끼게 하는 것과 비슷하다.
그런데 프로세스가 CPU나 메모리 같은 자원을 쓰려면, 직접 하드웨어를 건드릴 수는 없다. 그래서 운영체제는 "시스템 콜(System Call)"이라는 요청 창구를 만들어 놓는다.
프로세스가 어떤 자원이 필요할 때는, 운영체제에게 요청(system call)을 보내고, 운영체제가 대신 처리해주는 구조다.
| 구분 | 역할 |
|---|---|
| 유저 모드 | 일반 사용자 프로그램이 실행되는 공간 (제한적 권한) |
| 커널 모드 | 운영체제가 실행되는 공간 (모든 자원 접근 가능) |

프로세스는 실제로 쓰레드라고 하는 다수의 실행 유닛으로 구성되어 있다.
쓰레드 = 일꾼
🙋🏻♀️ 사무실(=프로세스)에서 여러 명의 직원(=쓰레드)이 같은 업무를 처리할 때, 같은 자료를 함께 사용해야 한다. 이처럼 각각의 쓰레드는 해당 프로세스의 컨텍스트에서 실행되며 동일한 코드와 전역 데이터를 공유한다.
가상 메모리는 각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있는 것 같은 환상을 제공하는 추상화이다.
프로세스마다 독립된 가짜 메모리 공간을 제공하는 시스템
쉽게 말해 "네가 메모리 4GB 전부 쓰는 것처럼 착각하게 해줄게!"

아래처럼 몇 개의 구역으로 나눠져 있어요 (주소는 아래 → 위로 증가)
new, malloc() 같은 걸로 메모리를 요청할 때 쓰는 공간.so, .dll 같은 라이브러리가 들어가는 곳def hello(): 함수 부르면 스택에 기록!파일(file)은 운영체제가 제공하는 또 다른 자원(Resource)의 추상화다.
- 하드디스크, SSD 같은 저장 장치는 사실 그냥 1과 0으로 이루어진 데이터 덩어리이다.
- 운영체제는 이 복잡한 장치 위에 "파일"이라는 단순한 개념을 씌워서,
프로그래머가 **"파일 이름으로 읽고 쓰는" 방식**으로 쉽게 다룰 수 있게 해준다.