✅ 1. 운영체제의 개념
(1) 운영체제의 개념
- 컴퓨터 하드웨어와 응용 프로그램(프로그래머) 혹은 컴퓨터 사용자 사이의 인터페이스를 제공하는 시스템 소프트웨어이다.
- 사용자 측면에서는 하드웨어에 대한 지식이 없어도 하드웨어에 접근하고 사용할 수 있는 하드웨어 사용의 편리성 제공
- 시스템 측면(개발자 측면)에서는 제한적인 컴퓨터 자원을 효율적으로 사용하기 위한 컴퓨터 자원 관리의 효율성 제공
(2) 컴퓨터 시스템과 운영체제와의 관계

- 응용 프로그램이나 사용자 프로그램들은 하드웨어의 메모리, cpu 등의 자원 또는 기능을 이용하기 위해서 운영체제를 통해서 하드웨어에 접근을 할 수 있게 된다. 즉, 운영체제는 하드웨어를 조작 할 수 있게 도와주는 프로그램으로 볼 수 있다.
(3) 운영체제 역할
- 관리대상인 자원의 범주에 프로세서 관리자, 주기억장치 관리자, 장치 관리자, 파일 관리자 의 역할을 수행 해준다.
(4) 운영체제의 네 가지 서브시스템

(5) 프로세서 관리자의 역할
- 프로세스에게 프로세서(중앙처리장치-CPU)를 할당함
- 프로세스를 위한 중앙처리장치의 할당과 관리를 담당하고, 이를 위해 각 프로세스의 상태를 모니터링함
- 프로세스에게 중앙처리장치의 할당이 필요한 경우를 찾아내고 효율적인 관리를 위해 프로세스의 실행 상태를 변화시키기도함.
- 프로세스: 실행중인 프로그램 / 프로세서: 처리기라는 뜻으로 CPU를 뜻함.
(6) 주기억장치 관리자의 역할
- 프로세스에게 주기억장치를 할당하고 프로세스로부터 할당된 주기억장치를 회수함
- 제한된 주기억장치를 여러 프로세스가 나누어 사용하기 위해 효율적인 주기억장치의 관리를 해주려고함.
- 주기억장치 관리자도 주기억장치를 할당 받고 상주하면서, 주기억장치 관리자에 의해서 보호되고 관리됨.
(7) 장치 관리자의 역할
- 시스템 개발자에 의해 구현된 운영체제의 스케줄링 기법에 따라 비디오 디스플레이, 키보드, 프린터, 디스크 드라이브와 같은 시스템의 모든 장치를 가장 효율적으로 관리하고 동작을 시킨다.
- 프로세스에게 할당된 장치를 반환하여 다른 프로세스가 사용할 수 있도록 함
(8) 파일 관리자의 역할
- 컴파일러, 인터프리터와 같은 시스템 프로그램과 각종 응용 프로그램, 그리고 데이터 파일 등의 모든 파일에 대한 읽기와 쓰기 동작을 관리한다.
- 파일에 대한 프로세스의 접근을 관리하여 데이터 보호를 보장한다.
- 파일을 위한 컴퓨터 자원의 할당과 회수 등을 수행한다.
✅ 2. 운영체제의 작업 처리방식
(1) 일괄처리 시스템
[ 개념: batch processing system ]
- 작업 간 전환을 줄여 컴퓨터 시스템을 최대한 활용하기 위하여 일괄처리 방식이 등장함
- 일괄처리 시스템은 처리할 작업이 발생할 때마다 즉각적으로 처리하지 않고 처리해야 할 작업이 일정량에 도달할 때까지 여러 작업을 모아놓는 방식 즉, 모아져 있는 작업을 한꺼번에 처리하는 방식임.
- 컴퓨터 시스템 사용의 효율성을 높일 수 있었으나 작업의 결과를 빠르게 확인할 수 없는 단점이 존재함.
- 일정량의 작업이 모아질 때까지 기다려야 하고, 정해진 시기이후에만 모아진 작업의 처리가 가능함.
(2) 다중프로그래밍 시스템
[ 개념: multiprogramming system ]
- 여러 개의 프로그램을 효율적으로 실행시키기 위해 컴퓨터의 여러 자원을 관리함
- CPU를 사용하고 있는 작업 A가 CPU의 사용을 멈추고 입출력 장치를 사용하게 되면, 아무도 사용하지 않는 CPU를 다른 작업 B에게 할당을 해줌. 즉, 효율적이지만 자원의 관리가 복잡해질 수 있음.
- 주기억장치에 여러 개의 작업(프로그램)이 동시에 존재하면서 주변장치(입출력 장치, 네트워크 장치 등)가 사용되는 동안 CPU가 다른 작업에 할당되는 개념으로 1960년 중반에 등장했음.
- 대부분 처리는 얘를 기반으로 시스템이 확장되거나 이용이 됨.
(3) 시분할 처리 시스템
[ 개념: time-sharing processing system ]
- 여러 사용자가 동시에 하나의 컴퓨터 시스템을 사용하는 것처럼 보이도록 CPU 시간을 나누어 주는 운영체제 방식임.
- 대화식 작업에서 사용자와 컴퓨터는 네트워크를 통해 상호작용을 하므로 컴퓨터가 사용자의 요구를 빠르게 처리해줘야 함
- 동시적인 대화식 사용자의 다중 프로그래밍을 위해서 개발된 것이 바로 시분할 처리 시스템임
- CPU의 시간을 일정 간격의 작은 시간으로 쪼개서 각 사용자에게 시간 간격이 할당되고, 그 동안 직접 컴퓨터와 대화식으로 작업을 수행할 수 있도록 개발이 됨.
- 많은 사용자들이 동시에 컴퓨터를 공유하면서도 각 사용자들은 자기 혼자 컴퓨터를 사용하고 있는 것과 같은 서비스를 받게 됨.
- 기억장치 관리, 디스크 스케줄링, 실행중인 작업 간의 통신, 입출력 장치의 사용에 대한 제어 및 관리 등의 복잡한 기능들이 요구되고, 이에 따라 운영체제는 점점 복잡해짐.
- 컴퓨터 자원의 효율성은 더욱 높아지고 컴퓨터 사용에 대한 만족도가 높아지게 됨.
- 정리: CPU의 데이터처리 속도가 매우 빠르고 나머지 주변 기기는 느린편이라 CPU 활용에 따라 성능이 달라질 수 있음.
- 다중 프로그래밍의 논리적 확장 버전임.
✅ 3. 기억장치의 구성
(1) 기억장치의 계층 구조

- 컴퓨터 시스템에서 사용되는 기억장치는 접근속도, 비용 및 장치의 용량에 따라 계층적으로 구성이 됨.
- 레지스터, 캐시, 주기억장치, 보조 기억장치 각각의 속도에 따른 가격의 차이가 있음.

- 중앙처리장치(CPU) 안에는 캐시랑 레지스터가 존재함.
- 주기억장치의 프로그램이 캐시와 레지스터에 들어가서 실행이 되는 방식임.
- CPU의 처리속도는 저장 장치에 비해서 엄청나게 빠르므로 CPU가 사용하려는 프로그램 코드와 데이터는 CPU 레지스터나 캐시 기억장치에 있어야 함.
- 레지스터나 캐시 기억장치의 용량의 한계로 인해 주기억 장치에도 저장된 프로그램 코드나 데이터에 접근할 수밖에 없음.
- 프로그램이나 데이터의 크기는 일반적으로 주기억장치보다 크기 때문에 당장 필요하지 않은 프로그램 코드나 데이터는 사용될 때까지 보조기억장치에 저장해 놓고, 이에 대한 실행이나 참조가 발생하는 시점에 주기억장치로 이동이 됨.
- CPU와 주기억장치 사이의 속도 차이로 인한 지연 문제를 방지하기 위해서 CPU와 주기억장치 사이에 주기억장치보다 빠른 속도의 기억장치인 캐시를 이용함.
- CPU가 어떤 프로그램 코드나 데이터가 필요한 경우, 느린 속도의 주기억장치에 접근해서 필요한 것을 검색하는 것이 아니라 우선적으로 빠른 속도의 캐시를 검색함.
- 만일 캐시 기억장치에 원하는 프로그램 코드나 데이터가 있다면 즉시 사용할 수 있게 됨.
- 캐시 기억장치에 원하는 내용이 존재하지 않는 경우에는 주기억장치를 검색해서 CPU로 가져가서 처리하고, 그 프로그램 코드나 데이터를 차후의 사용을 위해 캐시 기억장치에도 복사함.
- 즉, CPU 내에는 여러 레지스터가 존재하며 CPU에 직접 내장되어 있기 때문에 기억장치 중에서 가장 빠른 처리 속도를 제공
- CPU에서 데이터나 프로그램 코드를 사용할 때는 레지스터에 프로그램 코드나 데이터를 저장하고, CPU 가 연산을 처리함.
✅ 4. 주기억장치의 할당
주기억장치를 잘 관리 해야지 캐시나 레지스터에 데이터를 빠르게 줄 수 있음.
(1) 단일 사용자 연속 기억장치 할당
- 하나의 사용자 프로그램만이 전체 주기억장치에 할당되는 방식임
- 실행될 프로그램이 주기억장치의 용량을 초과하면 실행할 수 없음
- 단순하여 구현하기가 쉽지만 큰 프로그램을 수행할 수 없음
- 해당 방식은 주기억장치에 통째로 프로그램이 올라가야 하는데 프로그램 용량이 RAM 용량을 벗어나면 수행이 안됨.
- 쉽게말해, 애플리케이션 하나만 메모리에서 실행이 될 수 있다는 의미임.
[ 문제점 ]
- 하나의 프로그램이 모든 기억장치, 주변장치 및 CPU 등을 할당받아 사용하기 때문에 유후 자원에 대한 낭비가 심함.
- 쉽게말해, 프로그램 중간에 CPU를 사용하지 않으면 CPU가 놀고있는 현상이 발생함. 즉, 유후 자원 낭비가 발생
- 그리고 작은 프로그램 또한 전체 공간을 차지하기 때문에 메모리 낭비가 발생할 수 있음.
- 또한, 하나의 프로그램을 실행시키는 동안 다른 프로그램들은 기다려야 하므로 대기 시간이 길어짐
- 주기억장치의 크기보다 큰 프로그램을 실행할 수 없음
- 큰 프로그램을 수행하기 위해서 오버레이 기법이 제시됨
[ 오버레이 기법 ]

- 주기억장치의 이용 가능 영역보다, 큰 프로그램을 작은 네 프로그램으로 쪼개는 방식
- 쉽게말해, 주기억장치 크기보다 큰 프로그램을 실행하기 위해, 프로그램을 여러 부분으로 나누어 필요한 부분만 메모리에 올려서 실행하는 기법이라는 의미임.
- 사용자 프로그램은 실행 기간 동안 주기억장치 내에 있어야 하는 프로그램 코드와 데이터, 초기화 단계를 수행하는 프로그램 코드, 처리 단계를 수행하는 프로그램 코드, 출력 단계를 수행하는 프로그램 코드, 등의 네 부분으로 이루어짐.
- 네 부분의 프로그램은 필요한 시기엔 주기억장치에 번갈아 적재하고 실행이 되며, 주기억장치의 이용가능 영역 즉, 메모리 용량을 초과하는 프로그램을 메모리에서 실행할 수 있게 됨
- 대신 프로그램 자체의 설계가 복잡해짐. 이유는, 운영체제가 직접 프로그램을 쪼개는게 아닌 프로그래머가 직접 프로그램을 쪼개고, 어떤 모듈이 언제 필요한지 설계를 해야 했음. 즉, 원래 하나로 작성된 프로그램을 "기능별로 나누고", 동시에 메모리에 있어야 하는 모듈과 교체해도 되는 모듈을 구분하는 과정이 필요했음.
- 해당 오버레이 기법을 통해 주기억장치 보다 큰 프로그램 실행은 가능해졌지만, 결과는 하나의 프로그램만 올릴 수 있다는 문제
(2) 고정 분할 다중 프로그래밍 기법
[ 개념 ]
- 단일 사용자 연속 기억장치 할당 기법이 한 번에 하나의 프로그램만 실행시킬 수 있는 문제점을 보완하기 위해서 개발이 됨.
- 다중 프로그래밍 시스템(여러 개의 프로그램이 실행되는 시스템)에서 주기억장치를 여러 개의 고정된 크기의 영역으로 분할하고, 실행 중인 여러 개의 프로세스에게 각각 할당하는 기법임. ( 파티션을 만드는 느낌임 )
- 또한, 프로그램 실행 전에 운영체제가 미리 일정한 크기로 여러 구현을 나눈 방식이다 보니, 분할 된 메모리의 각각의 영역의 크기는 고정된 값으로 분할되고, 그 상태 그대로 프로그램이 실행 됨. ( 단편화의 문제점 발생 )
- 고정 분할 다중 프로그램이 기법: 주기억장치 내부에는 여러 개의 프로그램(프로세스)들이 공존하기 때문에 한 작업이 입출력을 요구할 때, CPU는 다른 프로그램에게 할당되어 연산을 처리할 수 있음
- 해당 기법위의 여러 프로그램들은 오버레이 기법을 활용하여 용량이 크더라도 실행이 가능함.
- 메모리에 여러 프로그램들이 상주해야 하므로 분할 영역들 간에 잘못된 참조 즉, 프로그램간 데이터 공유가 되는 문제를 방지하기 위한 메모리 보호가 필요함.
[ 단편화 ]
- 사용자 프로그램이 분할 영역에 정확히 맞지 않아서 단편화(fragmentation)가 발생할 수 있음.
- 고정된 값으로 할당이 되다보니, 프로그램의 크기가 분할된 영역보다 클 경우 실행이 불가능하고 작을 경우 공간 낭비가 됨.
- 결과적으로 분할된 영역들마다 낭비 공간이 발생할 수 있기 때문에 많은 공간이 낭비될 수 있음.
- 내부 단편화: 파티션 크기 > 프로그램 크기 → 공간이 남음
- 외부 단편화: 메모리 전체에는 충분한 빈 공간이 있지만, 연속된 공간이 부족해서 새로운 프로그램을 올릴 수 없는 상태
- 쉽게말해, 메모리는 셀 단위로 이어져 있는 연속 공간임 거기서 프로그램을 실행하려면 그 프로그램이 필요로 하는 크기만큼 연속된 셀이 필요함.
(3) 동적 분할 프로그래밍 기법
[ 개념 ]
- 고정 분할 다중 프로그래밍 기법의 단편화 문제를 해결하기 위해 개발이 됨. ( 내부 단편화의 공간 낭비는 해결이 됨. )
- 고정 분할과 달리 파티션 크기가 미리 정해져 있지 않음.
- 프로그램이 필요로 하는 만큼만 메모리를 할당을 통해 내부 단편화로 인해 발생하는 공간 낭비가 매우 감소됨.
- 하지만, 연속된 공간의 부족으로 외부 단편화가 발생함.
- 외부 단편화: 메모리 전체에는 충분한 빈 공간이 있지만, 연속된 공간이 부족해서 새로운 프로그램을 올릴 수 없는 상태
- 쉽게말해, 메모리는 셀 단위로 이어져 있는 연속 공간임 거기서 프로그램을 실행하려면 그 프로그램이 필요로 하는 크기만큼 연속된 셀이 필요함. 즉, 반납된 그 크기만큼 비어져 있어서 해당 공간의 활용이 어려운 문제점임.
[ 외부단편화 해결 방안 - 통합 ]
- 인접된 공백을 합쳐서 더 큰 하나의 공백으로 만드는 방법
- 프로세스를 이동시키지 않고, 단순히 빈 공간들을 논리적으로 연결하는 방법임.
- 단점: 인접하지 않은 빈 공간은 여전히 흩어져 있음 즉, 완전히 해결은 못함.
[ 외부단편화 해결 방안 - 집약(cocmpaction) ]
- 주기억장치 내의 흩어진 모든 공백을 하나로 모아서 하나의 커다란 저장 공간을 만드는 방법
- 모든 흩어진 공백을 하나로 합침으로써, 외부 단편화를 완전히 해결이 가능함.
- 단점: 프로세스 이동이 필요하며, 비용 발생
✅ 5. 가상기억장치
(1) 개요
- 주기억장치에서 이용 가능한 영역보다 큰 프로그램을 작은 단위로 쪼개어 실행시키기 위해 보조기억장치의 주소를 주기억장치의 주소로 변환하여 프로그램에게 제공되는 가상의 기억장치를 말함.
- 동일한 크기로 쪼개는 방식과 동적 크기로 쪼개는 방식으로 나누어짐.
- 보조기억장치의 주소를 주기억장치의 주소로 변환하는 기법이다.
- 실제 물리적 메모리보다 더 큰 메모리 공간을 프로그램에 제공하는 기술이며, 프로그램 입장에서는 필요한 메모리를 다 가진 것처럼 보이지만, 실제로는 일부만 RAM에 올려놓고 나머지는 디스크에 저장해 두는 방식임.
- 가상기억장치에서 가장 중요한 부분은 실행 중인 프로그램(프로세스)에 의해 참조되는 주소(가상 주소)를 변환하여 주기억장치에서 사용하는 주소(실 주소, 물리적 주소)로 연결시켜주는 것임.
- 쉽게말해, 연속되지 않은 블럭들의 주소값을 부여해 연속된 공간처럼 보이게 하는것이 핵심임.
- 가상기억장치 시스템에서는 실행 프로그램이 참조할 주소가 반드시 주기억장치의 주소일 필요는 없음
- 가상 주소의 범위는 주기억장치에서 사용할 수 있는 실 주소보다 더 크며 사용자의 논리적으로 통합된 주소 공간과 컴퓨터의 물리적 공간(주기억장치의 주소와 보조기억장치의 주소)을 연결시켜주는 개념임.
[ 정리 ]
- 실제 물리 메모리(RAM) 보다 큰 메모리 공간을 프로그램에 제공하는 기술임.
- 프로그램 입장에서는 "연속된 메모리"처럼 보이지만, 실제로는 RAM + 디스크를 함께 사용
- 특징으로는 외부 단편화 문제를 해결 할 수 있으며, 프로그램 전체를 RAM에 올릴 필요가 없음
- 즉, 가상 주소 공간 제공 + RAM/디스크 관리 기능 전체를 포괄하는 용어임.
(2) 페이징 기법

- 가상기억장치를 구현하는 구체적 기법 중 하나이다.
- 보조기억장치로부터 프로그램 코드나 데이터를 페이지(page)라고 불리는 동일한 크기의 블록으로 쪼개어서 주기억장치에 적재하여 접근하는 기법임.
- 쉽게말해, 보조기억장치에 프로그램 코드, 데이터를 동일한 크기로 쪼갠걸 페이지라고 하고 이걸 주기억장치에 적재함.
- CPU에서 프로세스를 실행하기 위해서는 프로세스의 실행될 페이지가 주기억장치에 적재되어 있어야 함.
- 페이지는 보조기억장치로부터 주기억장치로 옮겨져서 페이지 프레임에 적재되며, 이때 페이지는 사용 가능한 페이지 프레임을 할당받아 주기억장치에 적재됨.
(3) 세그먼테이션 기법

- 세그먼테이션 기법은 페이징 기법과 다르게 동일한 크기로 자르지 않고, 서로 다른 세그먼트를 만든다.
- 즉, 프로그램 코드나 데이터를 서로 다른 크기로 분할한 블록을 세그먼트(segment)라고 부름
- 페이징 기법은 동일하게 자르지만 세그먼테이션은 프로그램의 의도, 단위, 모듈 등을 고려해서 프로그램을 자르게 된다.
- 장점: 프로그램이 CPU에서 실행될 때 필요한 쪼개진 프로그램 데이터를 정확하게 맞출 가능성이 높아짐.
- 개발자들은 프로그램을 모듈 단위로 작성하는 습관에 기반을 두고 있기 때문에 사용자가 직접 작성한 프로그램 모듈이나 데이터의 모듈은 논리적 개념에 의해서 다른 크기의 블록으로 나뉠 수 있으며, 이 블록을 세그먼트라고 함
(4) 정리
- 정리하면 세그먼테이션 기법과 페이징 기법은 프로그램 전체를 동일한 크기로 자르냐 논리적인 단위로 자르냐의 차이임.
- 페이징 기법과 세그먼테이션 기법은 가상기억장치를 구현하는 방식이다.
- 즉, 가상기억장치를 만들기 위해 사용하는 구체적 메모리 관리 방법임. ( 가상기억장치를 만드는 방법이라 보면 됨 )
✅ 6. 결론
- 운영체제는 프로그램이며, 주기억장치(RAM)에 올라가 있음
- CPU는 주기억장치에 올라간 명령어들을 순서대로 가져와서 연산을 수행함
- 연산 결과는 다시 메모리나 입출력 장치(모니터, 디스크 등)로 전달을 해줌.
- 이러한 과정을 운영체제가 프로그램으로써 하드웨어를 관리해서 효율적으로 다룰 수 있게 프로그램화 해서 도와줌.
- 해당 내용들은 모두 운영체제가 어떻게 프로그램으로써, 하드웨어를 관리 해주는지에 관한 내용임.
'방송통신대학교 > 💻컴퓨터과학 개론' 카테고리의 다른 글
| [컴퓨터과학 개론] 9강 - 컴퓨터 구조(1) (0) | 2025.11.10 |
|---|---|
| [컴퓨터과학 개론] 8강 - 운영체제(2) (9) | 2025.11.10 |
| [컴퓨터과학 개론] 6강 - 알고리즘(2) (0) | 2025.11.10 |
| [컴퓨터과학 개론] 5강 - 알고리즘(1) (0) | 2025.11.10 |
| [컴퓨터과학 개론] 4강 - 자료구조(2) (0) | 2025.09.19 |