운영체제(18)
-
[1000줄 OS 구현하기] 페이지 테이블
페이지 테이블 | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app 앞서 “[1000줄 OS 구현하기] 프로세스”에서 간단한 멀티프로세싱을 구현해 보았다. Paging으로 가상 메모리를 관리하는 기능을 학습하고 구현해 보자. 1. 메모리 관리와 가상 주소 프로그램이 메모리에 접근할 때, CPU는 지정된 가상 주소(논리 주소)를 물리 주소로 변환한다. 이를 주소 바인딩(Address Binding), 주소 변환이라고 한다. 가상 주소와 물리 주소를 매핑하는 페이지 테이블이 필요하다. 2. 이론 교안에서는 RISC-V의 페이징 메커니즘 중 하나인 Sv32를 사용했다. Sv32는 2단계 page table로 구성된다. 구현에 앞서 가상 주소 구조와 tw..
2025.03.07 -
[1000줄 OS 구현하기] 메모리 할당
메모리 할당 | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app 1. 이론 가. 가상 메모리 (Virtual Memory)보조 저장자치의 일정 영역을 주 저장장치처럼 활용하는 방법을 제공. 훨씬 더 큰 공간의 보조 메모리를 가상의 메인 메모리(스왑 영역)로 사용하는 방식. 가상의 주소를 물리 주소와 매핑한다. CPU는 가상의 주소를 사용한다. 가상 주소 공간은 메모리 관리 장치(MMU)에 의해서 물리 주소로 변환된다. (address translation) 이 덕분에 프로그래머는 가상 주소 공간상에서 프로그램을 짜게 되어 프로그램이나 데이터가 주메모리상에 어떻게 존재하는지를 의식할 필요가 없어진다. 더보기💡swap 동작 순서메인 메모리에서 내려..
2025.02.11 -
[1000줄 OS 구현하기] 예외
예외 (Exception) | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app 1. 예외 운영체제(OS)에서 예외(Exception)는 프로그램 실행 중에 발생하는 예기치 않은 상황이나 오류를 의미한다. 이는 하드웨어나 소프트웨어에서 발생할 수 있으며, 정상적인 프로그램의 흐름을 방해하는 사건입니다. 예외는 크게 다음과 같은 상황에서 발생할 수 있다:하드웨어 인터럽트: 외부 장치로부터의 신호나 이벤트소프트웨어 인터럽트: 시스템 콜과 같은 프로그램의 의도적인 요청프로그램 오류: 0으로 나누기, 잘못된 메모리 접근, 페이지 폴트 등 운영체제는 이러한 예외 상황이 발생했을 때 적절한 예외 처리 루틴을 실행하여 시스템의 안정성을 유지해야 한다. 프로세스..
2025.02.05 -
[1000줄 OS 구현하기] 커널 패닉
커널 패닉 (Kernel Panic) | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app 1. 커널 패닉 커널 패닉은 운영체제의 커널에서 복구할 수 없는 치명적인 오류가 발생했을 때 시스템이 안전하게 작동할 수 없다고 판단하여 즉시 작동을 중지하는 상태를 말합니다. 블루스크린과 같다고 생각하면 된다. 이번 챕터에서는 크리티컬 한 오류가 발생하면 커널이 동작을 멈추도록 구현해 보았다. kernel.h#define PANIC(fmt, ...) \ do { ..
2025.02.03 -
[1000줄 OS 구현하기] C 표준 라이브러리
C 표준 라이브러리 | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app 1. C 표준 라이브러리 기본 타입과 메모리 조작, 문자열 조작 함수를 직접 구현해 본다. 가. 기본 타입들 common.htypedef int bool;typedef unsigned char uint8_t;typedef unsigned short uint16_t;typedef unsigned int uint32_t;typedef unsigned long long uint64_t;typedef uint32_t size_t;typedef uint32_t paddr_t;typedef uint32_t vaddr_t;#define true 1#define false 0#define..
2025.02.03 -
[1000줄 OS 구현하기] Hello World!
Hello World! | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app한글 번역이 생겼습니다! 1. SBI로 출력 SBI를 OS의 API 정도로 소개했었다. SBI의 function을 호출하기 위해선 ecall 명령어를 사용한다. 가. kernel.c#include "kernel.h"typedef unsigned char uint8_t;typedef unsigned int uint32_t;typedef uint32_t size_t;extern char __bss[], __bss_end[], __stack_top[];void *memset(void *buf, char c, size_t n) { uint8_t *p = (uint8_t..
2025.02.03 -
[1000줄 OS 구현하기] RISC-V Assembly
RISC-V 101 | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app 1. RISC-V RISC-V는 (”리스크 파이브"로 발음한다.) 축소 명령어 집합 컴퓨터 즉, RISC(Reduced Instruction Set Computer) 기반의 개발형 명령어 집합(ISA)이다. 대부분의 ISA와 달리 RISC-V ISA는 일부 목적으로는 자유로이 사용할 수 있으며, 누구든지 RISC-V 칩과 소프트웨어를 설계, 제조, 판매할 수 있게 허가되어 있다. 저자는 RISC-V를 CPU로 선택한 이유가 명세가 간단하고 초보자에게 적합하며, x86과 Arm과 함께 최근 주목받는 ISA이기 때문이라 한다. RISC-V Ratified Specificatio..
2025.01.17 -
[1000줄 OS 구현하기] 시작하기
1. 출처 Intro | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app 1000줄로 운영체제를 직접 구현할 수 있다고 한다. 운영체제를 공부할 겸 한번 만들어 보자. 실제로 Linux의 0.01 version이 8413 줄에 불과했다고 하니 충분히 가능할 것 같다. 글에 따르면 완성된 OS에선 기본적인 context switching, paging, user mode, a command shell, disk device driver, file read/write operations in C 등을 할 수 있다고 한다. 이 과정에서 가장 어려운 부분은 ‘디버깅’이라고 한다. 구현되지 않은 printf 없이 디버깅하는 방법을 배워야 한다. 충분히 ..
2025.01.17