xv6

xv6-riscv (folder structure of xv6)

White_Bean 2024. 2. 1. 21:56

xv6-riscv 폴더 구조

우션 xv6-riscv-snu 폴더에 들어가면

 

이렇게 여러 파일과 폴더가 나오는데 각각의 역할을 살펴보겠습니다.

 

 

  1. LICENSE: 이 파일은 xv6 소스 코드의 라이선스 정보를 담고 있습니다. 라이선스는 보통 BSD 또는 MIT 라이선스와 같은 오픈 소스 라이선스입니다. 
  2. Makefile: Makefile은 소스 코드를 컴파일하고 빌드하는 데 사용되는 지침을 포함합니다. 빌드 프로세스를 자동화하고 쉽게 관리할 수 있도록 도와줍니다.
  3. README: README 파일은 프로젝트에 대한 간단한 설명이나 사용법, 라이선스 정보 등을 포함합니다.
  4. fs.img: 파일 시스템 이미지입니다. 파일 시스템 이미지는 운영 체제가 사용하는 파일 및 디렉터리 구조를 저장하는 데 사용됩니다. 일반적으로 초기 파일 및 디렉터리 구조가 포함된 상태로 제공됩니다.
  5. kernel: 이 디렉터리에는 운영 체제의 커널 소스 코드가 포함되어 있습니다. 커널은 운영 체제의 핵심 부분으로, 하드웨어와 상호 작용하여 프로세스 관리, 메모리 관리, 입출력 처리 등을 담당합니다.
  6. mkfs: mkfs는 파일 시스템을 생성하는 데 사용되는 유틸리티입니다. 파일 시스템을 초기화하고 파일 시스템 이미지를 생성하는 데 사용됩니다.
  7. 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와 같은 파일의 내용이 없는 것도 알 수 있었습니다.