2년 전쯤 수강하다가 말았던 운영체제 공룡책 강의 를 다시 수강하면서 정리해보려고 한다. 아마 정리하면서 이해되지 않는 부분들은 추가적으로 깊게 공부할 것 같다!
🤔 목표는?
1. depth가 깊은 기술 면접에 대비하기
2. 컴퓨터 구조와 운영체제 지식을 잘 정리해서, 내 지식으로 만들기
📌 운영체제 (Operating System)
- 컴퓨터 위에서 항상 실행되는 프로그램. 컴퓨터 시스템을 운영하는 소프트웨어.
- 응용 프로그램에 시스템 서비스를 제공.
- 프로세스, 리소스, 사용자 인터페이스 등을 관리.
- 응용 프로그램과 하드 웨어 사이에서 중계자 역할.
- OS의 핵심인 kernel에서 시스템 프로그램과 어플리케이션 프로그램에 대한 인터페이스를 제공한다.
💡 컴퓨터 시스템을 운영하고 소프트웨어적으로 구현한다❗️
📌 폰 노이만 구조 (ISA: Instruction Set Architecture)
- 폰 노이만이라는 사람이 제시한 프로그램 저장 방식
- 메모리(RAM) 내부에 프로그램을 저장.
- 현재 컴퓨터의 기반이 되는 구조가 되었다.

1️⃣ 사용할 프로그램이나 명령어를 메모리에서 fetch 후 IR(Instruction Register)에 저장한다.
2️⃣ 그 후 명령어는 디코딩되어 메모리에서 피연산자(처리될 데이터 그 자체)를 가져올 수 있다. 그리고 내부 레지스터(Internal Register)에 저장된다.
3️⃣ 피연산자들에게서 명령어가 execute 된 이후에 결과는 다시 메모리에 저장된다.
💡 이 때 프로그램이란 ? ➡️ 명령어들의 집합 (= a set of instructions)
📌 컴퓨터 시스템의 구성 요소

💡 컴파일러, 어셈블러, 텍스트 에디터, 데이터베이스 시스템 등의 어떠한 형태든, 사용자가 응용 프로그램을 이용할 때 운영 체제가 사용자에게 서비스를 제공한다.
1️⃣ 하드 웨어 (the hardware)
2️⃣ 운영 체제 (the operating system)
3️⃣ 응용 프로그램 (the application programs)
4️⃣ 사용자 (a user)
📌 컴퓨터 시스템의 구성
클래식한 컴퓨터 시스템
- 한 개 이상의 CPU와 많은 device controller들이 bus를 통해 연결되어 있다.
부트스트랩(bootstrap) 프로그램이란 ?
- 컴퓨터에 전력이 들어오자마자 제일 먼저 실행되는 프로그램
- 컴퓨터가 부팅되면 디스크에 저장되어 있던 운영체제를 메모리에 로드(load)한다.
📌 Interrupts

- CPU process와 I/O device(hardware)가 통신하는 방법 중 하나
- 하드웨어는 언제나 system bus를 통해 interrupt를 trigger시킬 수 있고, CPU에 신호를 보낸다.
📌 저장 공간의 계층 구조

- 용량(storage capacity)과 접근 속도(access time)에 따라 위와 같은 계층 구조가 형성된다.
- 위로 갈수록 접근 속도가 빠르지만, 저장 용량이 작다.
- 메인 메모리(Main memory)는 보통 우리가 아는 RAM을 말한다.
- hard disk는 HDD이며, 마그네틱 카드 자기장을 이용한다.
- solid-state disk는 SSD를 말하며, 메모리 형태의 하드디스크이다.
📌 I/O Structure
💡 DMA (Directed Memory Access)란 ?
- CPU가 관여하지 않아도 될 때, 하드웨어 장치가 메모리에 직접 접근한다.
- CPU가 해야 할 주변 장치들 간의 전송을 DMA 장치가 대신 한다. ➡️ CPU의 효율을 향상시킨다.
📌 컴퓨터 시스템의 구조
💡 CPU : 명령어를 실행하는 하드웨어
💡 Processor : 한 개 이상의 CPU를 포함하는 물리적 칩
💡 Core : CPU의 후면 계산 장치, CPU의 각종 연산을 수행하는 핵심 요소
💡 Multicore : 한 CPU에 여러 개의 컴퓨팅 코어를 포함하는 것
💡 Multiprocessor : 여러 개의 프로세서를 포함하는 것
대칭형 다중 처리 (Symmetric Multiprocessing, SMP)
: 각각의 CPU 프로세서가 모든 작업들을 수행하는 가장 일반적인 다중 프로세서 시스템이다.

멀티 코어 설계 (Multicore Design)
: 여러 개의 CPU를 연결하는 것은 비용적으로 부담이 되므로, CPU 내의 core들을 연결하자❗️
: 같은 하나의 프로세서 칩 안에 여러 개의 코어들이 포함된다.

📌 운영체제 연산들
멀티 프로그래밍 (Multiprogramming)
: 메모리에 여러 개의 프로그램들을 적재해두고, CPU에서 하나의 프로그램이 대기 중일 때 다른 프로그램을 수행시켜 CPU의 사용 효율을 극대화한다.
멀티 태스킹(Multitasking) = 멀티 프로세싱(Multiprocessing)
- 멀티프로그래밍의 논리적인 확장
- 여러 개의 프로그램들을 동시에 띄워두고 실행할 수 있게 한다.
- CPU가 작업들을 최대한 빠르게 switch할 수 있게 해준다.
➡️ 실제로는 동시에 여러 프로그램을 사용하는 것처럼 사용자가 느낄 수 있게 CPU가 빠르게 수행되는 것이다❗️
- 프로그램이 running중일 때 각각의 작업들이 상호작용할 수 있게 해준다.
CPU 스케줄링 (CPU Scheduling)
- 여러 개의 프로세스들이 동시에 실행될 준비가 되어 있을 때, 다음에 어떤 프로세스를 실행시킬지 시스템이 선택하는 것.
- CPU 효율을 가장 높일 수 있는 프로세스를 선택하는 것이 중요 🌟
📌 가상화 (Virtualization)
- 한 컴퓨터의 하드웨어를 여러 개의 다른 실행 환경으로 추상화할 수 있도록 하는 기술.
- VMM (Virtual Machine Manager)
📌 운영체제 서비스들
운영체제는 프로그램의 실행을 위한 환경을 제공한다.
- UI(User Interface)
- 프로그램 실행
- 입출력 연산
- 파일 시스템 조정
- 통신(Communications)
- 에러 감지
- 자원 할당(Resource allocation)
- 로깅(Logging)
- Protection and security
Reference
🦖 운영체제 공룡책 강의
좋은 내용 잘 읽었습니다! 컴퓨터 시스템의 구조에 대해 완전 잊고 있었는데, 포스팅을 계기로 복습할 수 있어서 좋았습니다 ☺️