OS(14)
-
[1000줄 OS 구현하기] 파일 시스템
파일 시스템 | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app 1. tar tar: Tape archive: 컴퓨터에서, Tape Archive를 위해 고안된 파일 형식. 이 교안에서는 tar를 파일 시스템으로 사용했다. tar는 다수의 파일을 하나로 묶을 수 있는 아카이브 형식이고 각 파일의 내용뿐만 아니라 파일명, 생성일자 등 파일 시스템에 필요한 모든 메타데이터를 저장할 수 있기 때문이다. 가장 중요한 것은 tar의 데이터 구조는 FAT나 ext2 같은 일반적인 파일 시스템에 비해 매우 단순하다. 2. 디스크 이미지 생성하기 디스크 이미지로 사용할 tar 파일을 생성한다.mkdir disktouch disk/meow.txt disk/hel..
2025.03.17 -
[1000줄 OS 구현하기] 디스크 I/O
디스크 I/O | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app 2022-05-12 리눅스_디바이스_드라이버_1Device란? 네트워크 어댑터, LCD 디스플레이, 오디오, 터미널, 키보드, 하드디스크, 플로피디스크, 프린터 등과 같은 주변 장치를 뜻함. 디바이스의 구동을 위해서 디바이스 드라이버가 필요함. Devicramen4598.tistory.com 가상 디스크 장치인 virtio-blk를 위한 디바이스 드라이버를 구현한다. 1. Virtio Virtio는 Virtual I/O의 약자로 가상 장치(virtio devices)를 위한 디바이스 인터페이스 표준이다. 디바이스 드라이버가 가상 장치를 제어하는 데 사용하는 API로, 네트워크,..
2025.03.15 -
[1000줄 OS 구현하기] 시스템 콜
시스템 콜 | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app 애플리케이션이 커널 기능을 호출할 때 사용하는 시스템콜을 구현해 보자. 1. 시스템 콜 구현 User mode에서도 ecall을 통한 시스템 콜 구현하기. user.cint syscall(int sysno, int arg0, int arg1, int arg2) { register int a0 __asm__("a0") = arg0; register int a1 __asm__("a1") = arg1; register int a2 __asm__("a2") = arg2; register int a3 __asm__("a3") = sysno; __asm__ __vola..
2025.03.11 -
[1000줄 OS 구현하기] 유저 모드
유저 모드 | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app 유저 애플리케이션을 실행해 보자. 1. 바이너리 파일로 프로세스 생성 kernel.h// 애플리케이션 이미지의 기본 가상 주소입니다. 이는 `user.ld`에 정의된 시작 주소와 일치해야 합니다.#define USER_BASE 0x1000000앞서 “[1000줄 OS 구현하기] 애플리케이션”에서 shell.bin.o를 만들었다. shell.o의 메모리 매핑 정보를 날려버렸기 때문에 kernel.h에 따로 주소를 저장한다. kernel.cextern char _binary_shell_bin_start[], _binary_shell_bin_size[];_binary_shell_bin_st..
2025.03.11 -
[1000줄 OS 구현하기] 애플리케이션
애플리케이션 | OS in 1,000 Lines operating-system-in-1000-lines.vercel.app 앞서 가상 메모리를 paging을 통해서 관리하도록 기능을 구현했다. 이제 커널 위에서 애플리케이션을 동작시키기 위해서 고민해 보자. 1. 메모리 레이아웃 애플리케이션을 위한 주소 공간을 배치하기 위해서 애플리케이션용 링커 스크립트를 추가한다. 내용은 커널의 링커 스크립트와 거의 비슷하다. user.ldENTRY(start)SECTIONS { . = 0x1000000; /* machine code */ .text :{ KEEP(*(.text.start)); *(.text .text.*); } /* read-only data */ ..
2025.03.09 -
[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