[이어드림스쿨 1주차] 운영체제 복습

KiwiChipKiwiChip
9 min read

운영체제란?

운영체제는 하드웨어를 포함한 리소스를 제어하고 프로그램을 실행해주는 시스템 소프트웨어이다.

리소스(자원, resource)
컴퓨터에서 리소스는 프로그램이 작동할 때 필요로 하는 모든 하드웨어 요소들을 뜻하지만 그중에서도 특히 메모리를 의미한다. 각 응용프로그램마다 할당된 리소스가 있으며, 응용 프로그램은 다른 응용프로그램의 리소스를 강제로 사용할 수 없다.

쉽게 말하면, 하드웨어(컴퓨터 부품)와 소프트웨어(프로그램) 사이를 연결하고 관리하는 중재자 역할을 한다.

운영체제가 없다면 ❌

  • 하드웨어를 직접 조작해야 하므로 불편함

  • 여러 프로그램을 동시에 사용하기 어려움

  • 프로그램들이 리소스를 무분별하게 사용하여 충돌이 발생할 수 있음

운영체제가 있다면 ⭕

  • 마우스 클릭 몇 번으로 프로그램을 실행할 수 있음

  • 여러 프로그램이 사이좋게 리소스를 나눠 사용할 수 있음

  • 안정적이고 효율적인 컴퓨터 사용이 가능함


운영체제의 주요 기능

1. 프로세스 관리

프로세스란 실행 중인 프로그램을 의미한다. 운영체제는 프로세스를 효율적으로 관리하여 여러 프로그램이 동시에 실행될 수 있도록 지원한다.

운영체제의 프로세스 관리 역할

  • 실행 중인 프로그램의 상태 관리

  • 여러 프로그램이 CPU를 공정하게 사용할 수 있도록 조정 (멀티태스킹)

  • 프로세스 간 리소스 배분

📝 비유: 식당에서 여러 손님이 한꺼번에 들어올 때, 직원이 테이블을 안내하고 주문을 관리하는 것과 유사하다.


2. 메모리 관리

메모리는 CPU가 처리할 데이터와 명령어를 저장하는 공간이다. 운영체제는 프로그램이 실행될 때 필요한 메모리를 적절히 할당하고 회수한다.

메모리 관리의 역할

  • 프로세스가 실행되도록 메모리 할당

  • 메모리 부족 시 가상 메모리를 사용하여 보완

  • 보안 강화를 위해 프로세스 간 메모리 접근 제한

📝 비유: 도서관에서 책을 빌려주고 반납하는 시스템과 유사하다.

🔹 가상 메모리

실제 메모리가 적더라도 프로세스를 실행할 수 있도록 도와주는 기술

🔹가상 메모리의 장점

1️⃣ 정보 보호: 프로그램이 실제 메모리 위치를 모를 수 있어 악성 프로그램이 침투하기 어려움

  • 실제 주소(Real Address): 컴퓨터의 메모리(RAM)에 데이터를 저장할 때 사용하는 물리적인 공간의 위치.

  • 가상 주소(Virtual Address): 운영체제가 각 프로그램에게 부여하는 가상의 공간 주소이다. 실제 메모리 위치가 아니라, 임시로 부여한 가짜 주소라고 생각하면 쉽다.

2️⃣ 연속 주소 제공: 프로그램이 연속된 메모리를 사용할 수 있도록 보장하여 효율적인 실행 가능

  • 각 프로그램은 메모리를 연속적으로 사용할 수 있는 것처럼 인식한다.

  • 실제로 메모리는 여기저기 흩어져 있어도 운영체제가 연속된 가상 주소로 연결해주기 때문이다.


3. 파일 시스템 관리

파일 시스템은 저장장치(SSD, HDD)에 데이터를 저장하고 관리하는 역할을 한다. 운영체제는 파일을 생성, 수정, 삭제할 수 있도록 돕는다.

파일 시스템
파일을 생성, 수정, 삭제하고 관리하는 기능

📝 비유: 정리된 문서함을 사용하여 필요한 문서를 쉽게 찾을 수 있도록 하는 것과 유사하다.


4. 네트워크 관리

운영체제는 컴퓨터가 네트워크를 통해 데이터를 주고받을 수 있도록 프로토콜을 지원한다.

운영체제의 네트워크 관리 역할

  • 다양한 프로토콜(HTTP, FTP, SMTP 등) 지원

  • 포트 관리 (이미 사용 중인 포트를 다른 프로그램이 사용하지 못하도록 제한)

프로토콜
컴퓨터끼리 네트워크에서 데이터를 교환할 때 사용하는 약속된 규칙. (예: 한국 사람끼리는 한국어로, 미국 사람끼리는 영어로 대화하는 것처럼, 서로 같은 언어를 써야 소통이 가능하다!)

📝 비유: 아파트에서 각 세대가 독립된 현관문과 번호를 가지는 것처럼 운영체제가 포트를 관리하여 데이터가 정확히 전달되게 한다.

🎯 실제 사례로 이해하기

예를 들어, 웹 브라우저는 HTTP 또는 HTTPS 프로토콜을 이용해 웹사이트를 방문한다. 운영체제는 브라우저가 해당 프로토콜을 사용할 수 있도록 지원한다. 또, 동시에 여러 프로그램이 네트워크를 사용하면 운영체제는 포트를 관리해 서로 충돌하지 않도록 해준다.


운영체제 종류

1. 윈도우

사용자가 많고, 다양한 프로그램과 호환성이 뛰어남

2. 리눅스

서버 및 개발 환경에서 많이 사용됨, 오픈 소스

3. 맥OS

애플 제품에서 사용됨, 보안성이 높음

4. 도커 (Docker)

컨테이너 기술을 사용하여 어디서든 동일한 환경에서 실행할 수 있도록 해줌

🔹 컨테이너화의 특징과 장점

1️⃣ 모든 환경을 하나로 묶기 📦 :

  • 프로그램이 필요한 소프트웨어(라이브러리, 패키지, 설정 등)를 전부 컨테이너에 담아 관리한다.

  • 환경 설정을 매번 새로 하지 않고, 미리 준비된 컨테이너를 바로 실행할 수 있다.

2️⃣ 운영체제와 독립성 🖥️↔️💻:

  • 컨테이너는 내 컴퓨터의 운영체제와 상관없이 어디서든 동일하게 작동한다.

  • 윈도우, 맥, 리눅스 등 서로 다른 운영체제에서 같은 프로그램을 똑같이 실행할 수 있다.

📝 비유: 컵라면(컨테이너)처럼 물만 부으면 어디서나 같은 맛을 낼 수 있는 것과 유사하다.

🎯 실제 업무에서의 활용 예시

  • 데이터 분석가가 팀원과 동일한 분석 환경을 사용할 때

  • 개발자가 자신이 개발한 프로그램을 서버에 배포할 때

  • 클라우드 환경에서 손쉽게 애플리케이션을 실행하고 관리할 때


프로세스 구조

1. 프로세스란?

프로세스는 실행 중인 프로그램을 의미한다.

프로그램 vs 프로세스

구분프로그램(🔵)프로세스(⭐️)
정의실행 파일 또는 명령어 모음실행 중인 프로그램 (작업 상태)
상태정적인 상태 (움직이지 않음)동적인 상태 (실제 움직이고 작동 중)
메모리 사용메모리에 올라가기 전 상태메모리에 올라가서 작업 중

예시로 이해하기

  • 프로그램: 카카오톡 앱 파일 자체

  • 프로세스: 카카오톡을 실행해서 채팅하고 있는 상태

📝 비유:

  • 프로그램 = 요리 레시피 📖

  • 프로세스 = 레시피를 따라 요리를 만드는 과정 🍳

프로세스 vs 쓰레드(Thread)

구분프로세스(⭐️)쓰레드(🔵)
정의프로그램 실행 단위프로세스 내에서 동작하는 더 작은 작업 단위
메모리 공유독립적, 별도의 메모리 사용같은 프로세스 내에서 메모리를 공유
특징하나의 프로세스 내 여러 쓰레드 존재 가능프로세스 내에서 동시에 여러 작업을 처리

🎯 실무에서 프로세스는 언제 중요할까?

  • 데이터 분석 시, 동시에 여러 데이터를 처리할 때

  • 프로그램 성능 분석 시, 자원을 많이 쓰는 프로세스를 찾아 관리할 때

  • 개발 및 운영 시, 프로세스의 상태를 확인하고 오류 발생 시 관리할 때

핵심 요약

  • 프로세스는 실행 중인 프로그램을 의미한다.

  • 프로그램(정적) 🔵 → 프로세스(동적) ⭐️ 로 바뀐다고 기억하면 쉽다.

  • 프로세스는 독립적인 메모리를 할당받으며, 내부에서 여러 개의 쓰레드가 실행될 수 있다.

  • 쓰레드는 프로세스 내에서 동작하는 작은 단위이며, 같은 프로세스 내의 메모리를 공유한다.

  • 프로세스는 코드, 데이터, 힙, 스택 네 가지 영역으로 구성된다.

2. 프로세스의 메모리 구조

프로세스 = 요리를 만드는 과정 🍳

영역설명비유
코드(Code)프로그램 실행 명령어 저장레시피 📖 (어떻게 요리할지 적혀있는 방법)
데이터(Data)전역 변수 저장기본 재료 🍅 (소금, 설탕처럼 항상 미리 준비된 재료)
힙(Heap)동적 할당 메모리냉장고 🧊 (요리하다가 그때그때 필요한 식재료를 넣거나 꺼내는 공간)
스택(Stack)함수 실행 시 임시 데이터 저장도마 🔪 (잠깐 사용하고 치우는 재료를 올려놓는 공간)

📝 코드(Code) = 레시피

  • 컴퓨터에게 무엇을 할지 알려주는 명령을 저장한 곳.

  • 쉽게 말하면, 컴퓨터가 앱을 실행할 때 따라 하는 "순서와 방법"을 적어놓은 설명서.

예시: 계산기 앱을 실행할 때,

  • 사용자가 숫자와 '+' 버튼을 누르면 → 두 숫자를 더해라

  • '=' 버튼을 누르면 → 결과를 화면에 보여줘라

이런 명령을 저장한 부분이 코드(Code)이다.

프로그램 실행을 위한 명령어(코드)가 저장됨

읽기 전용(Read-Only) → 코드가 실행되지만 수정할 수 없음

💡 예시: 코드 영역 저장

# 코드(Code) 영역: 컴퓨터가 따라하는 명령들이 있는 곳
def 더하기(a, b):
    결과 = a + b
    return 결과

print(더하기(3, 5))

✅ 설명

  • 여기서 def 더하기(a, b): 라는 코드가 바로 컴퓨터가 따라하는 명령(레시피)이고, 프로그램을 실행하면 이 코드가 실행된다.

📦 데이터(Data) = 기본 재료

  • 앱을 실행할 때 항상 준비되어 있는 기본적인 데이터를 저장하는 공간.

  • 컴퓨터가 앱을 시작할 때부터 끝날 때까지 계속 가지고 있는 데이터이다.

예시: 게임 앱에서 캐릭터의 기본 능력치(체력, 공격력 등)는 앱이 실행될 때부터 항상 유지되는 값.

이런 값이 데이터(Data) 영역에 저장된다.

# 데이터(Data) 영역: 프로그램 실행 동안 항상 유지되는 값
기본값 = 10  # 프로그램 시작부터 끝까지 계속 유지되는 값

def 보여주기():
    print("기본값은:", 기본값)

보여주기()

✅ 설명

  • 기본값처럼 앱을 시작할 때부터 끝날 때까지 항상 유지되는 데이터는 데이터 영역에 저장된다.

🧊 힙(Heap) = 냉장고

  • 앱을 사용하는 도중에 그때그때 새로 만들어지거나 없어질 수 있는 데이터를 저장하는 공간이다.

  • 필요하면 만들어서 보관하고, 필요 없어지면 다시 지울 수 있는 공간이다.

예시: 게임에서 플레이어가 새 캐릭터를 추가하거나 아이템을 얻었을 때, 그때마다 새로운 데이터를 만들어 힙(Heap)에 저장하고, 필요 없으면 지우게 된다.

# 힙(Heap) 영역: 필요할 때 그때그때 새롭게 만들어 쓰는 데이터

냉장고 = []  # 빈 냉장고 준비

# 냉장고에 재료 넣기
냉장고.append("사과")
냉장고.append("바나나")

print("냉장고 내용물:", 냉장고)

# 재료를 꺼내서 사용 후 지우기
냉장고.pop()  # 바나나 꺼내서 사용 후 지움
print("바나나를 꺼낸 후 냉장고:", 냉장고)

✅ 설명

  • 냉장고(힙)는 필요할 때 데이터를 추가하거나 지울 수 있다.

  • 파이썬에서는 리스트(list) 같은 구조를 사용해서 데이터를 넣거나 뺀다.

🔪 스택(Stack) = 도마

  • 앱이 잠시 필요한 데이터를 올려놓고 사용한 다음, 다시 치우는 임시 공간이다.

  • 작업이 끝나면 바로 삭제된다.

예시: 계산기 앱에서 ‘2+3’을 계산할 때,

  • 숫자 '2'와 숫자 '3'을 잠깐 스택(Stack)에 올려놓고,

  • 더한 다음, 결과를 보여주면 '2'와 '3'은 바로 삭제된다.

즉, 잠시 쓰고 사라지는 데이터를 저장하는 곳이다!

# 스택(Stack) 영역: 잠시 사용하는 데이터를 임시로 올려두는 공간

def 임시계산():
    숫자1 = 10  # 임시 데이터 (도마 위에 올림)
    숫자2 = 20  # 임시 데이터 (도마 위에 올림)
    결과 = 숫자1 + 숫자2  # 임시 계산 결과
    print("임시 계산 결과:", 결과)

임시계산()
# 함수 실행이 끝나면 숫자1, 숫자2, 결과는 자동으로 사라짐

✅ 설명

  • 함수 내부에서 쓰는 임시 데이터(지역 변수)는 함수가 끝나면 자동으로 사라진다.

  • 마치 도마 위의 재료를 쓰고 나서 바로 치우는 것과 같다.

  • 운영체제에서의 스택은 자료구조 스택과 같이 LIFO(Last In, First Out, 후입선출) 구조로 동작한다.

  • 즉, 마지막에 넣은 데이터가 가장 먼저 나오는 구조를 가진다.

    • 비유: 접시 쌓기

      • 새 접시는 제일 위에 쌓고, 꺼낼 때도 위에서부터 꺼낸다.

힙(Heap)과 스택(Stack)의 차이

비교힙(Heap)스택(Stack)
메모리 할당프로그래머가 직접 메모리 할당/해제함수 호출에 따라 크기가 자동 변동
구조LIFO (후입선출)제한 없음 (동적 할당)
용도함수 호출, 지역 변수 저장객체/배열 등 동적 메모리 저장
데이터 유지프로세스가 종료될 때까지 유지 가능함수 실행이 끝나면 사라짐
관리자동 관리 (컴파일러/OS)프로그래머가 수동 해제 필요

3. 정적 할당 vs 동적 할당

컴퓨터는 프로그램을 실행할 때 필요한 데이터를 저장할 공간을 만들어야 한다.

이렇게 데이터를 저장할 공간을 만드는 방법에는 크게 두 가지가 있는데, 바로 정적 할당과 동적 할당이다.

비교정적 할당동적 할당
설명실행 전에 미리 메모리 할당실행 중에 필요할 때 메모리 할당
장점속도가 빠름메모리를 유연하게 사용할 수 있음
단점변경이 어렵고 낭비 가능속도가 상대적으로 느림

📝 비유:

  • 정적 할당 = 식당 예약 (미리 자리 확보)

  • 동적 할당 = 즉석에서 자리 배정 (유연하지만 대기 시간이 발생할 수 있음)

4. 각 메모리 영역별 특징 요약

메모리 영역설명실행 중 크기 변경 여부
코드(Code) 영역프로그램의 명령어(기계어)가 저장되는 영역❌ 고정
데이터(Data) 영역전역 변수, static 변수 저장❌ 고정
힙(Heap) 영역사용자가 동적으로 메모리 할당하는 영역 (예: malloc, new)✅ 가능
스택(Stack) 영역함수 호출 시 지역 변수리턴 주소 저장✅ 가능 (함수 호출 시 증가, 종료 시 감소)

❓ 질문:

  • 정적 할당과 동적 할당의 차이는?

    👉 정적 할당은 미리 정해놓은 공간만 사용하고, 동적 할당은 필요할 때 추가로 공간을 늘리거나 줄일 수 있다.

  • 동적 할당이 더 좋은가?

    👉 항상 그런 건 아니다. 상황에 따라 미리 정해진 공간이 효율적일 수도 있고, 유연하게 바꿀 수 있는 게 효율적일 수도 있다.

  • 실행 중 크기가 변할 수 있는 영역은?

    👉 정답: 힙(Heap) 영역과 스택(Stack) 영역

    • 힙 영역: 프로그래머가 직접 동적으로 할당/해제
      스택 영역: 함수 호출/종료에 따라 자동으로 증가/감소

      📌 코드 영역과 데이터 영역은 고정 크기로 할당되며, 실행 중 변하지 않음.


0
Subscribe to my newsletter

Read articles from KiwiChip directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

KiwiChip
KiwiChip

I'm currently learning Python and studying RAG (Retrieval-Augmented Generation).