컴퓨터 시스템 구조

🖥 구성 요소 정리
- OS가 설치된 부분, 사용자 프로그램 영역으로 나뉘어 있음.
- 프로세스는 이 메모리 영역에서 동작함.
1. CPU (중앙처리장치)
- Interrupt 발생 시 제어 흐름 전환: 사용자 모드에서 → "monitor 모드(커널 모드)"로 전환.
- OS는 CPU가 Interrupt를 감지하고 처리할 수 있도록 감시함.
- interrupt vector 를 통해 적절한 서비스 루틴으로 점프함.
2. Interrupt Line
- CPU와 각 장치 컨트롤러 사이에 존재.
- 특정 장치에서 Interrupt를 발생시키면, 이 선을 통해 CPU에 신호를 보냄.
- CPU는 해당 interrupt를 감지하고, Interrupt Service Routine(ISR)을 실행함.
3. Interrupt Controller
- 각 장치에서 발생한 Interrupt를 우선순위에 따라 처리할 수 있게 관리해주는 하드웨어.
- 키보드처럼 입력이 빠르게 들어오는 장치는 고우선 순위를 가지기도 함.
- interrupt 번호를 사용하여 ISR 위치를 결정.
4. 각 장치 컨트롤러 (Disk, Timer, etc.)
- 각 I/O 장치들에는 자체 controller가 존재.
- 예: Disk controller는 Disk와 연결되어 I/O 요청을 처리함.
- DMA controller는 CPU의 개입 없이 데이터 전송을 수행.
📝 너의 필기 요약
- key 입력이 발생 → 해당 interrupt가 발생하여 CPU가 처리하게 됨.
- interrupt 1, 2, 3 은 각 장치에 따라 다름 (예: 키보드, 프린터 등).
- interrupt가 발생하면 → interrupt vector를 참조하여 ISR로 이동.
- CPU는 monitor 모드로 전환됨.
- DMA를 통해 CPU를 거치지 않고 memory ↔ I/O 장치 간의 직접 통신 가능.
🔄 흐름 요약
- 사용자 프로그램 실행 중 → 입력 이벤트 발생 (예: 키 입력)
- I/O 장치에서 Interrupt 발생
- Interrupt line 통해 CPU로 신호 전달
- Interrupt controller가 우선순위에 따라 처리
- CPU는 현재 작업을 잠시 중단하고, Interrupt vector를 통해 ISR(Interrupt Service Routine) 실행
- Interrupt 처리 후, 원래 작업으로 복귀
✅ 컴퓨터 시스템 구조
📍 이 그림은 컴퓨터 하드웨어(HW)와 운영체제(OS)의 구성 및 입출력 장치 간의 인터럽트 처리 흐름을 설명한 구조도야.
🧩 구성 요소 및 기능
- CPU
- 인터럽트 처리 기능이 있는 핵심 연산 장치
- ⭕ 표시: CPU가 **"monitor 모드"**로 진입한다는 뜻
- 인터럽트를 받으면 mode를 monitor 모드로 전환함
- Interrupt 발생 시 → 해당 interrupt vector 번호를 이용해 ISR(Interrupt Service Routine) 실행
- Interrupt line
- 각 장치에서 오는 인터럽트를 CPU로 전달하는 선로
- Memory Controller
- memory I/O 관리
- interrupt 정보도 메모리 통해 전달됨
- DMA Controller / Timer Controller
- DMA: 직접 메모리 접근을 담당함
- Timer: 타이머 인터럽트 발생 가능
- Interrupt Device Controller
- 하단 디바이스들(1~4번 장치)의 인터럽트를 받아 CPU로 전달함
- interrupt 신호가 Controller로 먼저 모여서 CPU로 감
🖥️ 하단 I/O 디바이스 흐름
- Disk (장치 ①)
- interrupt → controller → CPU 전달됨
- 📝 메모: "key 입력"도 발생 가능
- Printer (장치 ②)
- Interrupt 시 CPU가 반응
- Monitor (장치 ③)
- Display 출력 관련 장치
- Keyboard (장치 ④)
- Key 입력 시 인터럽트 발생
- Local buffer에 저장된 데이터를 interrupt 통해 CPU로 보냄
- 🔹 필기: “interrupt 발생 → CPU가 monitor 모드로 전환”
🔁 인터럽트 처리 흐름 요약
- 장치(1~4)에서 interrupt 발생
- Interrupt device controller가 수신
- CPU에 인터럽트 전달
- CPU는 interrupt vector를 통해 ISR 호출
- ISR 실행 시 OS가 개입
- 이후 원래 실행 중이던 사용자 프로그램으로 복귀
📝 키워드 정리
- monitor 모드: 커널 모드. CPU가 OS 기능 실행할 수 있는 모드
- interrupt vector: 각 인터럽트에 고유하게 부여된 번호로 ISR 식별에 사용됨
- ISR (Interrupt Service Routine): 인터럽트를 처리하는 OS 함수
입출력 IO의 수행

I/O 처리 흐름과 Interrupt 처리 과정
🧭 전체 흐름 설명
📌 상황 예시:
사용자가 키보드 입력을 하여 read(1)을 호출했을 때,
어떻게 OS가 해당 입력을 받아오는지를 구체적인 흐름으로 보여주는 그림.
🔄 흐름 단계별 정리
단계설명
① read(1) 호출 | 사용자 프로그램이 시스템 콜 read(1)을 호출함. (예: 터미널 입력 요청) |
② OS read(1) 진입 | 시스템 콜 인터페이스를 통해 커널 내부의 OS의 read 함수로 진입 |
③ 실제 입력 대기 | 사용자 입력을 받기 위해 **키보드 장치의 ISR(Interrupt Service Routine)**에서 대기 |
④ 키보드 입력 발생 | 사용자가 키를 누르면, 키보드가 Interrupt를 발생시킴 |
⑤ Interrupt 발생 | 키보드 → Interrupt controller → CPU에 전달 |
⑥ ISR 실행 | CPU는 interrupt vector를 참조하여 **ISR(키보드용)**으로 이동하여 실행 |
⑦ 입력 처리 | ISR은 키보드 버퍼로부터 데이터를 읽어오고, 이를 OS의 read로 넘김 |
⑧ 사용자에 결과 전달 | OS는 read(1)의 결과로 읽은 문자를 사용자 프로그램에 반환함 |
📝 네 필기 반영
- "read(1)" → "os의 read(1)" → ISR → 값 읽기
: 시스템콜 → 커널 read 함수 → 인터럽트 서비스 루틴을 거쳐 입력값 전달 - "key 입력 → interrupt → ISR 실행 → 데이터 읽기"
: 키를 누르면 인터럽트 발생 → ISR 실행 → 키보드 버퍼에서 데이터 읽음 - "vector 번호"
: 어떤 장치에서 interrupt가 발생했는지 구분하기 위한 interrupt vector 번호
→ 이를 기반으로 ISR 위치 결정됨
📌 Interrupt Vector Table이란?
각 I/O 장치에 대해 해당 interrupt가 발생했을 때 호출할 ISR의 주소를 저장한 테이블
예: 키보드는 33번, 타이머는 32번 등
👁️ 한눈에 보는 흐름 요약 (전체 연결)
사용자 프로그램 ↓ read(1) ↓ OS의 read(1) ↓ 키 입력 발생 ↓ Interrupt 발생 ↓ Interrupt vector lookup ↓ ISR 실행 (키보드) ↓ 키보드 버퍼에서 값 읽기 ↓ OS read 함수로 반환 ↓ 사용자에게 문자 반환
🔑 키워드 요약
용어설명
System Call | 사용자 → OS 요청 인터페이스 |
ISR | Interrupt 발생 시 실행되는 커널 함수 |
Interrupt Vector | 각 장치 interrupt 번호 → ISR 위치 연결 |
read(1) | 터미널에서 문자 1개 읽는 대표적 시스템 콜 |
📄 동기식 입출력(Synchronous I/O) vs 비동기식 입출력(Asynchronous I/O)

🟧 공통 구조 개요
- 각 그림의 흐름도는 시간 흐름에 따른 입출력 처리 순서를 나타냄.
- 수직선은 kernel과 user 영역을 구분.
- 주요 컴포넌트:
- Hardware: 실제 장치 (예: 프린터)
- Interrupt Handler: 인터럽트 처리 루틴(ISR)
- Device Driver: 장치 제어를 위한 커널 내부 소프트웨어
- Requesting Process: 입출력을 요청한 사용자 프로세스
(a) 동기식 입출력 (Synchronous)
📌 PPT 원문 + 필기 정리
- 📄 PPT 설명:
- 요청한 프로세스는 입출력이 끝날 때까지 기다린다.
- 시스템 콜 이후 → waiting 상태로 진입
- 작업이 끝난 뒤 wake-up
- 📝 필기:
- “CPU가 I/O 작업 끝날 때까지 기다림” (기다리는 동안 idle 상태)
- 커널 → 사용자 영역 복귀 없음 (blocking call)
- print → 다 출력할 때까지 기다림
🔁 흐름 설명
- 사용자 프로세스가 print 요청 → 커널에 system call
- 커널이 디바이스 드라이버에게 작업 요청
- 하드웨어에서 데이터 전송 시작
- 작업 끝날 때까지 프로세스는 waiting
- 장치가 작업 완료 → 인터럽트 발생
- 인터럽트 핸들러(ISR) 실행
- 프로세스가 wake-up 되어 재진입
✅ 특징: 프로세스는 입출력이 끝날 때까지 아무 작업도 못 함
(b) 비동기식 입출력 (Asynchronous)
📌 PPT 원문 + 필기 정리
- 📄 PPT 설명:
- 프로세스는 I/O 요청 후 즉시 다음 작업 수행 가능
- 시스템 콜 이후 blocking 없이 진행됨
- 📝 필기:
- “CPU가 다른 작업 수행 가능”
- print → 요청만 하고 끝까지 기다릴 필요 없음
- 장치 완료되면 인터럽트 발생 → 커널이 처리 → 결과 전달
🔁 흐름 설명
- 사용자 프로세스가 print 요청 → system call
- 커널이 device driver에게 요청
- 하드웨어에서 데이터 전송 시작
- 프로세스는 바로 다음 코드 수행 가능
- 입출력이 끝나면 → 인터럽트 발생
- ISR 처리 → 이후 결과를 프로세스에 알려줌
✅ 특징: 입출력 중에도 CPU는 다른 일을 할 수 있음
🔍 차이 요약
구분동기식 I/O비동기식 I/O
시스템 콜 이후 | 프로세스가 기다림 | 즉시 반환 후 다음 작업 가능 |
CPU 활용 | 비효율적 (idle time) | 효율적 (다른 작업 수행 가능) |
인터럽트 사용 | 완료 후 wake-up | 완료 시 결과 알림 |
📄 프로그램의 실행 (메모리 load)

📌 전체 흐름 개요
- 사용자가 .c 파일을 컴파일하면 → 실행파일(.exe)이 생성
- 이 실행파일은 OS에 의해 DRAM에 적재되어 실행됨
- 실행 중인 프로그램 = 프로세스(Process)
📥 실행 흐름 (PPT + 필기 반영)
- 사용자가 a.c를 compile
- 🔸 → compile A → A.exe
- ✍️ 필기: compile을 하면 실행파일(.exe)이 만들어진다
- 실행 시, OS가 .exe 파일을 메모리에 올림
- 🔸 파일 시스템(File system) → 실행파일(.exe) → DRAM
- ✍️ 필기: 실행파일 A → 코드/데이터가 DRAM에 올라감
- DRAM에 적재된 실행파일은 프로세스로 전환됨
- 🔸 코드(Code), 데이터(Data), 스택(Stack) 등으로 분할
- ✍️ 필기: 코드가 올라간 영역은 read only
- CPU는 메모리에 올라간 코드를 fetch하여 실행
- ✍️ 필기: CPU는 코드 실행 중, DRAM의 코드 영역 참조함
🧠 핵심 구조: 실행파일 → 메모리 적재 → 실행 중 프로세스
- 🔹 Physical Memory(DRAM): 실제 실행 중인 프로세스가 위치
- 🔹 CPU: 코드 fetch & 실행
- 🔹 Kernel 영역: 운영체제 핵심 코드(커널 코드)는 별도 위치에 있음
💡 보충 개념
- 코드(Code): 실행 명령어, 읽기만 가능 (read-only)
- 데이터(Data): 전역변수 등
- 스택(Stack): 함수 호출 시 지역변수 저장, 호출 순서 저장
- 파일 시스템(File System): .exe가 존재하는 저장소
🔐 필기 강조 내용 요약
- 코드는 read only (수정 불가)
- 실행파일은 커널에 의해 DRAM으로 적재됨
- 메모리에 올라간 순간부터 ‘프로세스’라고 부름
- CPU가 DRAM에서 코드 fetch → 명령어 실행
📄 사용자 프로그램의 주소 공간 (메모리 load)

📌 전체 구조 설명
- 이 슬라이드는 가상 메모리(Virtual Memory) 구조를 설명함
- 사용자 프로그램은 자신만의 논리적 주소 공간(Address Space) 을 가짐
- 실제 물리 주소(Physical Memory)와는 다르며, 주소 변환(Address Translation) 이 일어남
🧠 주요 구성요소
▶ Virtual Address Space (가상 주소 공간)
- 사용자 프로세스는 자신만의 주소 공간을 갖는다 (ex. 0, 100, 200 등)
- 구성:
- Code: 프로그램 코드 (read only)
- Data: 전역변수, 초기화된 데이터 등
- Stack: 함수 호출 시 지역변수 저장, 호출 순서 저장
- PPT 구조에서 stack은 주소가 높은 곳부터 낮은 쪽으로 자람 (Stack grows downward)
▶ Physical Address Space (물리 주소 공간)
- DRAM 상의 실제 메모리
- 커널이 관리하는 영역과 사용자 프로세스 메모리 영역이 있음
- 주소 예시: 2100, 2200, 2300 등
▶ Address Translation (주소 변환)
- CPU가 참조하는 가상 주소를 실제 메모리 주소로 변환
- OS + MMU(HW)가 매핑을 관리함
- 예:
- 사용자 A: 0 → 물리 2100
- 사용자 B: 0 → 물리 2300
- 서로 다른 프로세스는 같은 가상 주소를 써도 실제 메모리 위치는 다름
📝 필기 내용 정리
- 가상 메모리를 쓰기 때문에 실제 주소는 다름
- 프로세스 A의 0주소는 실제로 2100일 수도 있음
- stack grows downward (위에서 아래로 자람)
- 실행파일이 DRAM에 올라감 (OS가 적재)
- 실제 주소는 주소 변환 통해 알아냄
✅ 암기 포인트
- 가상 메모리(Virtual Memory) 는 실제 물리 메모리와 분리됨
- Address Translation 을 통해 가상 주소 → 물리 주소로 변환
- stack은 높은 주소에서 낮은 주소로 성장
- 각 프로세스는 독립된 주소 공간을 갖는다
- 코드 영역은 read only (수정 불가)
사용자 프로그램이 사용하는 함수

📌 전체 구조 설명
- 이 슬라이드는 사용자 프로그램이 사용하는 함수의 종류와 호출 방식을 설명해.
- 사용자 프로그램은 다양한 함수를 호출하며, 이 함수들은 크게 두 가지로 나뉘어.
🧠 주요 구성요소
▶ 1. 사용자 정의 함수 (User-defined Function)
- 사용자가 직접 작성한 함수로, 프로그램 내부에 정의되어 있어.
- 예를 들어, int add(int a, int b) 같은 함수가 이에 해당해.
- 이러한 함수들은 컴파일 시 프로그램에 포함되며, 실행 중에는 프로세스의 코드 영역에 위치해.
▶ 2. 라이브러리 함수 (Library Function)
- 운영체제나 컴파일러에서 제공하는 함수로, 표준 라이브러리에 포함되어 있어.
- 예를 들어, printf(), scanf() 같은 함수들이 이에 해당해.
- 이러한 함수들은 컴파일 시 링크되어 프로그램에 포함되며, 실행 중에는 프로세스의 코드 영역에 위치해.
📝 필기 내용 정리
- 사용자 프로그램은 직접 작성한 함수와 라이브러리 함수를 호출한다.
- 이러한 함수들은 모두 프로그램의 코드 영역에 위치하며, 실행 중에 호출된다.
✅ 암기 포인트 요약
- 사용자 프로그램이 사용하는 함수는 사용자 정의 함수와 라이브러리 함수로 나뉜다.
- 이러한 함수들은 모두 프로그램의 코드 영역에 위치한다.
- 함수 호출은 실행 중에 이루어지며, 호출된 함수의 주소로 프로그램의 흐름이 이동한다.
📄 커널 주소 공간의 내용

🧠 전체 구조 설명
이 그림은 OS 커널 내부 주소 공간의 구성과, 커널이 인터럽트, 시스템 콜, 프로세스 관리 등을 어떻게 처리하는지를 보여줌.
- 주소 공간은 코드, 데이터, 테이블 등 다양한 요소들로 구성돼 있음.
- 각 요소는 특정 기능을 맡고 있고, 커널은 이걸 통해 시스템 전체를 통제함.
📌 커널 영역 구성 요소 설명
구성 요소역할필기 내용 포함 설명
code (kernel code) | 커널이 실행하는 명령어 코드 | 시스템 콜, 인터럽트 등 핵심 실행 코드 포함 (✍️ kernel source, code 영역) |
data (커널 데이터 영역) | 전역변수/자료구조 저장 | 예: PCB 저장, 프로세스/메모리 상태 관리 |
table (데이터 구조) | 프로세스 테이블, 파일 테이블 등 | PCB, 페이지 테이블 등 관리용 구조체 포함 |
object (하드웨어 객체) | CPU, 메모리, 디스크 등의 제어 인터페이스 | ✍️ Hardware 제어 위한 object 로 이해 가능 |
🧾 필기 설명 정리
- ✍️ privileged instructions → 커널 코드에서만 실행 가능
- ✍️ ISR, system call 등은 모두 커널 내부 코드에서 처리됨
- ✍️ 커널은 자원 관리 및 하드웨어 제어를 위해 이 구조를 가짐
⚙️ 프로세스 관리 관련 구성
- PCB (Process Control Block):
- 각 프로세스의 상태 정보 저장 (ex. Process A의 PCB, Process B의 PCB)
- ✍️ 프로세스 A가 실행 중일 때는 Process A의 PCB 정보가 사용됨
- Stack 영역:
- 시스템 콜 수행 시, 사용자 스택과 커널 스택 구분
- ✍️ 시스템 콜 발생 시 커널 스택에 jump
- ✍️ kernel stack = 함수 호출 기록, 지역 변수 저장
🔄 인터럽트 및 시스템 콜 흐름
- 사용자 프로그램에서 system call 발생
→ trap → 커널 코드 실행 (read 등)
→ 커널 스택 사용
→ 작업 완료 후 원래 사용자 모드 복귀
→ ✍️ interrupt도 마찬가지로 커널 내부에서 처리
✅ 암기 포인트 요약
- 커널 주소 공간은 code, data, table, object로 구성된다.
- 커널 코드는 시스템 콜, 인터럽트 등의 핵심 기능을 처리한다.
- ISR, system call은 모두 커널 모드에서 수행된다.
- PCB는 각 프로세스의 상태 정보를 저장하는 자료구조이며, 커널 영역에 위치한다.
- 커널 스택은 시스템 콜, 인터럽트 처리 시 사용하는 스택이다.
'CS > 운영체제' 카테고리의 다른 글
[운영체제] ch06. Process Synchronization (0) | 2025.04.21 |
---|---|
[운영체제] ch05. CPU Scheduling (0) | 2025.04.21 |
[운영체제] ch04. Process Management (0) | 2025.04.21 |
[운영체제] ch03. Process (0) | 2025.04.21 |
[운영체제] ch01. Introduction to Operating Systems (0) | 2025.04.21 |