[1000줄 OS 구현하기] 파일 시스템

Featured image for [1000줄 OS 구현하기] 파일 시스템

파일 시스템 | OS in 1,000 Lines 1. tar 이 교안에서는 tar를 파일 시스템으로 사용했다. tar는 다수의 파일을 하나로 묶을 수 있는 아카이브 형식이고 각 파일의 내용뿐만 아니라 파일명, 생성일자 등 파일 시스템에 필요한 모든 메타데이터를 저장할 수 있기 때문이다. 가장 중요한 것은 tar의 데이터 구조는 FAT나 ext2 같은 일반적인 파일 시스템에 비해 매우 단순하다. … 더 읽기

[1000줄 OS 구현하기] 디스크 I/O

Featured image for [1000줄 OS 구현하기] 디스크 I/O

디스크 I/O | OS in 1,000 Lines 가상 디스크 장치인 virtio-blk를 위한 디바이스 드라이버를 구현한다. 1. Virtio Virtio는 Virtual I/O의 약자로 가상 장치(virtio devices)를 위한 디바이스 인터페이스 표준이다. 디바이스 드라이버가 가상 장치를 제어하는 데 사용하는 API로, 네트워크, 디스크, 그래픽스와 같은 다양한 I/O 작업을 가상 환경에서 처리할 수 있게 해 준다. virtio-blk의 ‘blk’는 ‘block’의 약자로, 블록 … 더 읽기

[1000줄 OS 구현하기] 시스템 콜

Featured image for [1000줄 OS 구현하기] 시스템 콜

시스템 콜 | OS in 1,000 Lines 애플리케이션이 커널 기능을 호출할 때 사용하는 시스템콜을 구현해 보자. 1. 시스템 콜 구현 User mode에서도 ecall을 통한 시스템 콜 구현하기. ecall 명령어가 실행되면 예외 핸들러가 호출되어 제어권이 커널로 넘어갑니다. 2. 시스템 콜과 예외 가. 시스템 콜을 요청하는데 예외가 발생하는 이유 ecall은 RISC-V 아키텍처에서 예외(exception)로 처리된다. RISC-V뿐만 아니라 x86 … 더 읽기

[1000줄 OS 구현하기] 유저 모드

Featured image for [1000줄 OS 구현하기] 유저 모드

유저 모드 | OS in 1,000 Lines 유저 애플리케이션을 실행해 보자. 1. 바이너리 파일로 프로세스 생성 앞서 “[1000줄 OS 구현하기] 애플리케이션”에서 shell.bin.o를 만들었다. shell.o의 메모리 매핑 정보를 날려버렸기 때문에 kernel.h에 따로 주소를 저장한다. 애플리케이션의 바이너리 이미지를 페이지 단위로 반복하면서 메모리를 할당하고 매핑. 각 반복마다 새 페이지를 할당하고 이미지 데이터를 할당된 페이지에 복사. 사용자 접근 권한(PAGE_U) … 더 읽기

[1000줄 OS 구현하기] 애플리케이션

Featured image for [1000줄 OS 구현하기] 애플리케이션

애플리케이션 | OS in 1,000 Lines 앞서 가상 메모리를 paging을 통해서 관리하도록 기능을 구현했다. 이제 커널 위에서 애플리케이션을 동작시키기 위해서 고민해 보자. 1. 메모리 레이아웃 애플리케이션을 위한 주소 공간을 배치하기 위해서 애플리케이션용 링커 스크립트를 추가한다. 내용은 커널의 링커 스크립트와 거의 비슷하다. 프로그램이 시작될 때 스택 영역도 0으로 초기화된 상태에서 시작되어야 하기 때문에, 스택을 .bss 섹션에 … 더 읽기

[1000줄 OS 구현하기] 페이지 테이블

Featured image for [1000줄 OS 구현하기] 페이지 테이블

페이지 테이블 | OS in 1,000 Lines 앞서 “[1000줄 OS 구현하기] 프로세스”에서 간단한 멀티프로세싱을 구현해 보았다. Paging으로 가상 메모리를 관리하는 기능을 학습하고 구현해 보자. 1. 메모리 관리와 가상 주소 프로그램이 메모리에 접근할 때, CPU는 지정된 가상 주소(논리 주소)를 물리 주소로 변환한다. 이를 주소 바인딩(Address Binding), 주소 변환이라고 한다. 가상 주소와 물리 주소를 매핑하는 페이지 테이블이 … 더 읽기

[1000줄 OS 구현하기] 메모리 할당

Featured image for [1000줄 OS 구현하기] 메모리 할당

메모리 할당 | OS in 1,000 Lines 1. 이론 가. 가상 메모리 (Virtual Memory) 보조 저장자치의 일정 영역을 주 저장장치처럼 활용하는 방법을 제공. 훨씬 더 큰 공간의 보조 메모리를 가상의 메인 메모리(스왑 영역)로 사용하는 방식. 가상의 주소를 물리 주소와 매핑한다. CPU는 가상의 주소를 사용한다. 가상 주소 공간은 메모리 관리 장치(MMU)에 의해서 물리 주소로 변환된다. (address translation) … 더 읽기

[1000줄 OS 구현하기] 예외

Featured image for [1000줄 OS 구현하기] 예외

예외 (Exception) | OS in 1,000 Lines 1. 예외 운영체제(OS)에서 예외(Exception)는 프로그램 실행 중에 발생하는 예기치 않은 상황이나 오류를 의미한다. 이는 하드웨어나 소프트웨어에서 발생할 수 있으며, 정상적인 프로그램의 흐름을 방해하는 사건입니다. 예외는 크게 다음과 같은 상황에서 발생할 수 있다: 운영체제는 이러한 예외 상황이 발생했을 때 적절한 예외 처리 루틴을 실행하여 시스템의 안정성을 유지해야 한다. 프로세스의 … 더 읽기

[1000줄 OS 구현하기] 커널 패닉

Featured image for [1000줄 OS 구현하기] 커널 패닉

커널 패닉 (Kernel Panic) | OS in 1,000 Lines 1. 커널 패닉 커널 패닉은 운영체제의 커널에서 복구할 수 없는 치명적인 오류가 발생했을 때 시스템이 안전하게 작동할 수 없다고 판단하여 즉시 작동을 중지하는 상태를 말합니다. 블루스크린과 같다고 생각하면 된다. 이번 챕터에서는 크리티컬 한 오류가 발생하면 커널이 동작을 멈추도록 구현해 보았다. 매크로 설명 동작 __FILE__ 현재 소스 … 더 읽기

[1000줄 OS 구현하기] C 표준 라이브러리

Featured image for [1000줄 OS 구현하기] C 표준 라이브러리

C 표준 라이브러리 | OS in 1,000 Lines 1. C 표준 라이브러리 기본 타입과 메모리 조작, 문자열 조작 함수를 직접 구현해 본다. 가. 기본 타입들 예를 들어 align_up(0x1234, 0x1000)은 0x2000이 되고, is_aligned(0x2000, 0x1000)은 true를 반환하지만 is_aligned(0x2f00, 0x1000)은 false를 반환한다고 한다. 메모리 정렬(alignment)은 시스템의 성능과 안정성을 위해 필요하다. 순수 C 코드로 구현할 수도 있지만 교제에서는 Clang의 … 더 읽기