| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 코틀린
- Kotlin
- QEmu
- 해킹
- Android Studio
- React Native
- 프로그래밍
- 프로젝트
- 프론트엔드
- 앱 개발
- 산학
- 개발
- BOB
- 소프트웨어학과
- 플러그인
- 보안제품개발
- 코딩
- 화이트햇스쿨
- 정보보안
- 애플리케이션
- bob 14기
- 악성코드
- 앱
- IT
- CPU
- 후기
- 정보보호
- 소프트웨어
- 보안
- 학부연구생
Archives
- Today
- Total
맨땅에 코딩
운영체제 그게 뭔데?(QEMU·플러그인 관점) 본문
분명 저는 소프트웨어학과 학생이지만, OS 수업을 듣지 않은 바보랍니다.
지금 프로젝트를 진행하는 중인데 운영체제 개념이 없다보니, 팀원들과 소통하는데 한계를 느껴
OS에 대해 공부하고 짧게 남아 개념들을 정리해봅니다...
1. 운영체제가 하는 일 - 하드웨어를 관리하는 관리자
운영체제는 하드웨어 자원(CPU, 메모리, 디스크, I/O)을 관리하고,
그 위에서 프로그램(프로세스)들이 돌아가게 만드는 중간 관리자입니다.
사용자 → 프로그램(프로세스) → 운영체제 → 하드웨어(CPU, 메모리, 디스크)
- 우리가 "Chrome 실행" 같은 걸 하면, OS는 CPU 시간, 메모리, 파일 입출력 권한을 Chrome에 배분해 준다.
- QEMU 플러그인은 이 과정을 옆에서 감시하는 것이라고 생각하면 된다.
2. 운영체제의 4대 핵심 구성 요소
| 구성 요소 | 설명 | QEMU/플러그인과의 관련성 |
| 1. 프로세스 관리(Process Management) | CPU를 어떤 프로그램이 언제 쓸지 결정 | 명령어 실행 추적(CPU 이벤트) |
| 2. 메모리 관리(Memory Management) | 프로그램마다 쓸 수 있는 메모리 구역 관리 | 가상주소 → 물리주소 변환 추적 |
| 3. 파일 시스템(File System) | 파일 읽기/쓰기, 권한 관리 | I/O 추적, 로그 파일 저장 |
| 4. 입출력(I/O) 관리 | 키보드, 디스크, 네트워크 제어 | IRQ(인터럽트) 감시 |
3. 프로세스와 스레드
프로세스(Process) = 실행 중인 프로그램
스레드(Thread) = 프로세스 안에서 실제로 CPU에서 실행되는 작업 단위
OS는 어떻게 여러 프로세스를 동시에 돌릴까?
- 사실 CPU는 한 번에 한 명령어만 처리함
- OS는 아주 빠르게 "컨텍스트 스위칭(Context Switching)"을 해서 여러 프로세스가 동시에 돌아가는 것처럼 보이게 한다.
플러그인이 추적하는 건 바로 이 "CPU에서 실행되는 스레드"의 명령어 흐름이다.
4. CPU 스케줄러(Scheduler)
CPU가 한순간에 한 프로세스만 실행할 수 있기 때문에,
OS는 "누구한테 CPU를 줄지" 계속 결정한다.
- 시분할(time-sharing): 각 프로세스에 짧은 시간씩 CPU 배분
- 스케줄링 알고리즘: FCFS, RR, Priority 등
- 컨텍스트 스위칭(Context Switch): CPU가 실행중인 레지스터 상태를 저장하고, 다른 프로레스로 교체하는 것
QEMU 플러그인은 이 시점에서 "CPU 레지스터가 언제, 어떻게 바뀌었는지" 추적이 가능하다.
5. 메모리 관리(Memory Management)
프로그램마다 "가상 주소(Virtual Address)" 공간을 따로 부여해서
실제 물리 메모리(Physical Memory) 위에 올려주는 구조
핵심 개념
| 개념 | 설명 |
| 가상 메모리(Virtual Memory) | 각 프로세스가 "자기만의 메모리"처럼 보이게 하는 기법 |
| 페이지(Page) | 메모리를 일정한 크기(4KB 등)로 나눈 단위 |
| 페이지 테이블(Page Table) | 가상주소 → 물리주소를 매핑해주는 구조체 |
| PFN(Page Frame Number) | 실제 물리 메모리의 위치 번호 |
| 페이지 폴트(Page Fault) | 필요한 페이지가 없을 때 발생하는 예외 |
QEMU는 이 페이지 테이블 구조를 가상으로 재현한다.
즉, 플러그인은 QEMU의 MMU 이벤트를 통해 "어떤 가상주소가 실제 어느 물리주소로 매핑되었는가"를 추적할 수 있다.
6. 인터럽트(Interrupt)
하드웨어나 소프트웨어가 CPU에게 "중요한 일이 있다!" 라고 신호를 보내는 것
- 키보드 입력, 네트워크 수신, 타이머 등 모든 하드웨어는 IRQ(Interrupt Request)로 CPU를 깨움
- CPU는 현재 작업을 멈추고 인터럽트 핸들러로 점프해서 처리 후 돌아감
QEMU에서는 이런 인터럽트도 시뮬레이션하고, 플러그인은 "어떤 시점에 어떤 IRQ가 발생했는가"를 IRQ Trace 형태로 기록할 수 있다.
7. 시스템 콜(System Call)
유저 프로그램이 직접 하드웨어를 다룰 수 없기 때문에,
OS에게 "이거 좀 해달라"하는 명령
write(fd, buf, size); // OS에게 파일쓰기 요청
read(fd, buf, size); // OS에게 파일읽기 요청
플러그인은 이런 시스템 콜 실행 시점도 잡아낼 수 있다.
예: "파일을 쓸 때마다 I/O 이벤트 발생" 로그를 남길 수 있다.
8. 보호 모드와 권한
OS는 CPU의 모드(Mode)를 바꿔가며 보호 기능을 수행한다.
| 모드 | 설명 |
| 커널 모드 (Ring 0) | 하드웨어 접근 가능(OS 핵심 동작) |
| 유저 모드 (Ring 3) | 제한된 권한(일반 앱 실행) |
플러그인 입장에서는 "커널 코드 실행 중인지, 유저 코드인지" 구분이 가능해야 한다.
(이를 위해 EIP/RIP 주소나 세그먼트 값 확인)
9. 파일 시스템
OS는 파일을 디렉터리 구조로 관리한다.
- FAT, NTFS, EXT4 등 다양한 포맷 존재
- 파일 접근은 결국 "디스크 블록 I/O"
- 플러그인이 직접 다루진 않지만, 스냅샷 시 디스크 상태도 함께 저장할 수 있다.
10. 운영체제의 전체 동작 요약
┌────────────────────────────────┐
│ 사용자 프로그램 (User Mode) │
│ - 크롬, VSCode 등 │
│ - System Call 로 OS 요청 │
└──────────────┬─────────────────┘
│
▼
┌────────────────────────────────┐
│ 운영체제 커널 (Kernel Mode) │
│ - 프로세스 관리 │
│ - 메모리 관리 (MMU) │
│ - 스케줄러 / 인터럽트 처리 │
│ - 파일 시스템 / 디바이스 I/O │
└──────────────┬─────────────────┘
│
▼
┌────────────────────────────────┐
│ 하드웨어(CPU, RAM 등) │
└────────────────────────────────┘
QEMU는 위 구조 전체를 "소프트웨어로 가짜로 흉내내는 프로그램"이고,
플러그인은 이 흐름 중간중간의 데이터를 기록하는 센서 역할을 한다.
'낙서장' 카테고리의 다른 글
| 메모리 구조 핵심 요약(QEMU·플러그인 관점) (0) | 2025.10.26 |
|---|---|
| CPU 동작 원리 핵심 정리(QEMU·플러그인 관점) (0) | 2025.10.26 |
| 유니스트 컴퓨터공학과 대학원 전기 1차 합격 후기 (0) | 2025.09.25 |
| 추억용으로 남기는 대학 입시 일기 (1) | 2025.09.20 |
| Docker 내가 보려고 만든 명령어 정리본 (0) | 2025.02.11 |
