[CS BASIC] 운영체제 – 하드웨어 속 숨은 관리자

맹쥐·2025년 3월 25일

정글-개발일지

목록 보기
4/24

📚 운영체제(OS)의 주요 목적

운영체제는 컴퓨터 하드웨어 위에서 동작하는 중간 관리자이다.

예를 들어, hello 프로그램을 실행하면 이 프로그램이 직접 키보드, 디스플레이, 하드디스크 같은 하드웨어를 직접 제어하지 않는다.

운영체제(OS)가 하드웨어와 프로그램 사이에서 중간다리 역할을 하기 때문이다.

운영체제의 주요 목적은 다음 두 가지이다.

1️⃣ 하드웨어의 오남용 방지

  • 프로그래머가 실수나 악의적인 코드로 하드웨어를 잘못 다루지 못하도록 보호한다.
  • 예: 메모리 보호, CPU 독점 방지, 디스크 접근 제한 등.

2️⃣ 단순하고 균일한 장치 조작

  • 다양한 하드웨어(키보드, 디스크, 프린터)를 일관된 방식으로 사용할 수 있도록 추상화한다.
  • 예: "파일 읽기"라는 명령은 하드디스크, SSD 상관없이 같은 방식으로 호출 가능.

→ 운영체제는 이 두가지 목표를 근본적인 추상화를 통해 달성하고 있다.

🧐 여기서 말하는 추상화(abstraction)란,

복잡하고 다양한 하드웨어의 세부 동작을 숨기고, 프로그래머가 단순한 인터페이스만 사용하게 만드는 개념이다.

🙋🏻‍♀️ 예를 들어, 컴퓨터 전원 버튼을 눌렀을 때내부적으로는 전력 공급, 부팅, BIOS 초기화, OS 로딩 등 복잡한 과정이 진행되지만, 우리는 단순히 “버튼을 누르면 컴퓨터가 켜진다”고 인식한다. 이처럼 복잡한 내부 과정을 감추고, 핵심 기능만 사용자에게 보여주는 것이 추상화이다.


✅ 1. 프로세스

  • 프로세스는 실행 중인 프로그램에 대한 운영체제의 추상화이다.

우리가 hello 프로그램을 실행하면,

그 프로그램이 CPU, 메모리, 키보드 같은 장치들을 전부 혼자 쓰는 것처럼 보인다.

하지만 실제로는 여러 프로그램이 같은 컴퓨터 자원을 함께 사용하고 있고,

운영체제(OS)순서를 정해가며 공평하게 나눠 쓰게 만들어주는 것이다.

💡 운영체제는 문맥전환이라는 방법을 사용한다.

  • 운영체제는 프로세스가 실행하는 데 필요한 모든 상태정보의 변화를 추적한다. 이때의 상태정보를 컨텍스트라고 부른다.
  • 여러 프로세스가 실행될 때 운영체제는 프로세스를 번갈아 실행시키며 마치 동시에 실행되는 것처럼 느끼게 한다.

🙋🏻‍♀️ 마치 요리사가 손님 4명의 요리를 하나씩 완성하지 않고, 조금씩 나눠가며 조리해서 손님 모두가 자기 요리가 계속 진행되고 있다고 느끼게 하는 것과 비슷하다.

문맥 전환

  • 만약 시스템 콜 처리 도중 다른 프로세스로 바꿔야 한다면, 운영체제는 지금 프로세스의 컨텍스트를 저장하고, 다음 프로세스의 컨텍스트를 불러와 실행한다.

그런데 프로세스가 CPU나 메모리 같은 자원을 쓰려면, 직접 하드웨어를 건드릴 수는 없다. 그래서 운영체제는 "시스템 콜(System Call)"이라는 요청 창구를 만들어 놓는다.

프로세스가 어떤 자원이 필요할 때는, 운영체제에게 요청(system call)을 보내고, 운영체제가 대신 처리해주는 구조다.


📌  커널(Kernel)과 유저 모드

  • 커널(Kernel)은 운영체제의 핵심 부분이다.
  • 커널은 시스템 자원을 직접 제어할 수 있는 특권 영역이에요.
구분역할
유저 모드일반 사용자 프로그램이 실행되는 공간 (제한적 권한)
커널 모드운영체제가 실행되는 공간 (모든 자원 접근 가능)

📌 시스템 콜 → 모드 전환 흐름

  1. 사용자 프로그램이 시스템 콜 호출
  2. 유저 모드 → 커널 모드로 전환
  3. 커널이 요청 처리 (예: 파일 열기, 메모리 할당)
  4. 처리 후 커널 모드 → 유저 모드로 돌아감

✅ 2. 쓰레드 (Thread)

프로세스는 실제로 쓰레드라고 하는 다수의 실행 유닛으로 구성되어 있다.

쓰레드 = 일꾼
🙋🏻‍♀️ 사무실(=프로세스)에서 여러 명의 직원(=쓰레드)이 같은 업무를 처리할 때, 같은 자료를 함께 사용해야 한다. 이처럼 각각의 쓰레드는 해당 프로세스의 컨텍스트에서 실행되며 동일한 코드와 전역 데이터를 공유한다.

✅ 3. 가상메모리

가상 메모리는 각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있는 것 같은 환상을 제공하는 추상화이다.

프로세스마다 독립된 가짜 메모리 공간을 제공하는 시스템
쉽게 말해 "네가 메모리 4GB 전부 쓰는 것처럼 착각하게 해줄게!"

🤔 그럼, 가짜 메모리 공간은 어떻게 생겼을까?

아래처럼 몇 개의 구역으로 나눠져 있어요 (주소는 아래 → 위로 증가)


📌  프로그램 코드와 데이터

  • 프로그램 실행에 필요한 코드와 상수 값들이 들어 있음
  • 크기는 고정돼 있음

📌  힙

  • 실행 도중에 new, malloc() 같은 걸로 메모리를 요청할 때 쓰는 공간
  • 필요할 때 늘어남, 안 쓰면 줄어듦
  • 예: 리스트 만들기, 객체 생성 등

📌  공유 라이브러리

  • 프로그램이 사용하는 .so, .dll 같은 라이브러리가 들어가는 곳
  • 여기도 프로그램 실행 도중 자동으로 채워짐

📌  스택

  • 함수 호출/종료에 따라 자동으로 커졌다 작아졌다 하는 공간
  • 지역 변수, 함수 인자, return 주소 등이 여기에 저장됨
  • 예: def hello(): 함수 부르면 스택에 기록!

📌  커널 가상메모리

  • 사용자 프로그램은 접근 못 함 ❌
  • 운영체제(OS)가 쓰는 공간 (진짜 메모리 제어는 여기서 함)

✅ 4. 파일

파일(file)은 운영체제가 제공하는 또 다른 자원(Resource)의 추상화다.

  • 하드디스크, SSD 같은 저장 장치는 사실 그냥 1과 0으로 이루어진 데이터 덩어리이다.
  • 운영체제는 이 복잡한 장치 위에 "파일"이라는 단순한 개념을 씌워서,
프로그래머가 **"파일 이름으로 읽고 쓰는" 방식**으로 쉽게 다룰 수 있게 해준다.
profile
이유민

0개의 댓글