전체 글(590)
-
[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. 프로세스 운영체제는 프로세스의 생성, 실행, 일시 중지, 종료 등의 상태 전환을 관리. 각 프로세스가 사용하는 시스템 자원(메모리, 파일 등)을 할당 및 관리한다. 2. PCB 가. PCB Process Control Block운영체제에서 각 프로세스에 대한 상태와 제어 정보를 저장하는 데이터 구조. PCB에 포함되는 주요 정보설명프로세스 ID각 프로세스를 고유하게 식별할 수 있는 번호프로세스 상태실행 중, 준비 완료, 대기 등 프로세스의 현재 상태프로그램 카운터(PC)다음에 실행할 명령어의 주소레지스터 상태CPU 레지스터들의 값. 문맥 전환 시 중요한 역할을 함메모리 관리 정보페..
2025.03.06 -
[홈서버] Proxmox Backup Server
1. 요구사항물리적으로 분리된 하드웨어에 백업.중요한 데이터는 최소 주 1회 백업.백업 자동화.비용 최소화소음 최소화 Proxmox Backup ServerProxmox Backup Server is an enterprise backup solution, for backing up and restoring VMs, containers, and physical hosts.www.proxmox.com 증분 백업을 위해서 Proxmox Backup Server를 설치한다.(Proxmox, PBS 모두 오픈소스다!) 하드웨어로는 집에서 놀고 있는 라즈베리파이 3B+와 외장하드를 사용한다. 지금은 PBS를 Proxmox의 VM으로 생성하지만 가능한 빠른 시일 내로 PBS를 Proxmox에서 분리해야 한다. 전용..
2025.02.28