xv6
xv6-riscv (folder structure of xv6)
White_Bean
2024. 2. 1. 21:56
xv6-riscv 폴더 구조
우션 xv6-riscv-snu 폴더에 들어가면
이렇게 여러 파일과 폴더가 나오는데 각각의 역할을 살펴보겠습니다.
- LICENSE: 이 파일은 xv6 소스 코드의 라이선스 정보를 담고 있습니다. 라이선스는 보통 BSD 또는 MIT 라이선스와 같은 오픈 소스 라이선스입니다.
- Makefile: Makefile은 소스 코드를 컴파일하고 빌드하는 데 사용되는 지침을 포함합니다. 빌드 프로세스를 자동화하고 쉽게 관리할 수 있도록 도와줍니다.
- README: README 파일은 프로젝트에 대한 간단한 설명이나 사용법, 라이선스 정보 등을 포함합니다.
- fs.img: 파일 시스템 이미지입니다. 파일 시스템 이미지는 운영 체제가 사용하는 파일 및 디렉터리 구조를 저장하는 데 사용됩니다. 일반적으로 초기 파일 및 디렉터리 구조가 포함된 상태로 제공됩니다.
- kernel: 이 디렉터리에는 운영 체제의 커널 소스 코드가 포함되어 있습니다. 커널은 운영 체제의 핵심 부분으로, 하드웨어와 상호 작용하여 프로세스 관리, 메모리 관리, 입출력 처리 등을 담당합니다.
- mkfs: mkfs는 파일 시스템을 생성하는 데 사용되는 유틸리티입니다. 파일 시스템을 초기화하고 파일 시스템 이미지를 생성하는 데 사용됩니다.
- user: 이 디렉터리에는 사용자 공간 프로그램의 소스 코드가 포함되어 있습니다. 사용자 프로그램은 운영 체제 위에서 실행되며, 주로 응용 프로그램이나 유틸리티를 포함합니다.
Kernel & User
커널 폴더에 들어가면 이렇게 많은 파일이 각자의 역할을 하고 있음을 알 수 있습니다.
사용자 공간 프로그램 또한 많은 파일이 있는 것을 확인할 수 있습니다.
각 파일이 무엇인지 알아보기 위해 xv6: a simple, Unix-like teaching operating system (mit.edu) xv6-book을 참고하였습니다.
File | Description |
bio.c | 파일 시스템을 위한 디스크 블록 캐시 |
console.c | 사용자에게 입력을 받는 키보드와 화면에 대한 연결 |
entry.S | 시스템 초기 부팅 명령 |
exec.c | exec() 시스템 콜 |
file.c | 파일 디스크립터 지원 |
fs.c | 파일 시스템 |
kalloc.c | 물리적 페이지 할당 |
kernelvec.S | 커널로부터의 트랩과 타이머 인터럽트 처리 |
log.c | 파일 시스템 로깅과 크래시 복구 |
main.c | 부팅 중 다른 모듈의 초기화를 제어 |
pipe.c | 파이프 |
plic.c | RISC-V 인터럽트 컨트롤러 |
printf.c | 콘솔에 형식화된 출력을 표시 |
proc.c | 프로세스와 스케줄 |
sleeplock.c | CPU를 양보하는 Lock |
spinlock.c | CPU를 양보하지 않는 Lock |
start.c | 초기 machine-mode 부트 코드 |
string.c | C 문자열 및 바이트 배열 라이브러리 |
swtch.S | 스레드 전환 |
syscall.c | 시스템 호출을 처리하는 함수로 디스패치 |
sysfile.c | 파일 관련 시스템 호출 |
sysproc.c | 프로세스 관련 시스템 호 |
trampoline.S | 사용자 모드와 커널 모드 간에 전환하는 어셈블리 코드 |
trap.c | 함수를 이용해 트랩과 인터럽트를 처리하고 복귀하는 C 코드 |
uart.c | 시리얼 포트 콘솔 장치 드라이버 |
virtio_disk.c | 디스크 장치 드라이버 |
vm.c | 페이지 테이블과 주소 공간 관리 |
자세한 설명은 xv6-book 카테고리에 정리할 것입니다.
user 폴더 안에는 주로 명령어를 정의한 파일 위주로 있는 것을 알 수 있었습니다.
그렇기에 xv6-book에서 cat.c와 같은 파일의 내용이 없는 것도 알 수 있었습니다.