← MMOS 소개로 돌아가기
RISC-V OS Foundations · Volume 01
제1권 상세 목차
『직접 만들며 배우는 RISC-V 운영체제』 중간본의 8부·54장·112절 구성입니다. 부팅부터 사용자 셸까지 구현 순서대로 읽거나, 필요한 장으로 바로 이동할 수 있습니다.
Part 01
제1부 실행 환경과 첫 커널
-
제1장 책의 목표와 재현 가능한 개발 환경
- 1.1서론
- 1.2개발 환경
-
제2장 RISC-V 부팅 순서와 커널 이미지
- 2.1부팅 순서
-
제3장 커널 브링업과 초기 실행 상태
- 3.1커널 브링업 기초
-
제4장 UART 콘솔과 관찰 가능한 커널
- 4.1초기 콘솔 브링업 (UART)
-
제5장 초기 메모리 관리와 디바이스 트리
- 5.1메모리 관리와 디바이스 트리
-
제6장 U-Boot, 저장장치, 부트 이미지
- 6.1U-Boot, 저장장치, 부트 이미지
-
제7장 테스트와 디버깅으로 동작 확인하기
- 7.1테스트와 디버깅
Part 02
제2부 사용자 모드와 트랩 기반
-
제8장 사용자 모드 전환을 위한 권한과 CSR
- 8.1모드 전환과 사용자 초기 프로세스
-
제9장 트랩 디스패치와 시스템콜 ABI
- 9.1트랩 디스패치와 시스템콜
-
제10장 Sv39 페이지 테이블과 사용자 init 컨텍스트
- 10.1Sv39 커널 페이지 테이블
- 10.2사용자 init 프로세스 브링업
-
제11장 사용자 모드 실행 검증과 남은 과제
- 11.1사용자 모드 준비에서 파일 실행 준비로
Part 03
제3부 저장장치, ELF와 첫 사용자 프로그램
-
제12장 블록 장치와 파일시스템 읽기
- 12.1커널 장치 모델과 블록 디바이스 기초
- 12.2커널에서 파일 내용을 읽기
-
제13장 시스템콜 기반과 ELF 실행 준비
- 13.1시스템콜 프레임워크와 프로세스 진입 준비
- 13.2ELF 로더 구현과 exec 준비
-
제14장 /sbin/init 적재와 사용자 VM
- 14.1exec 준비: /sbin/init 적재와 사용자 진입 컨텍스트 구성
- 14.2사용자 페이지 폴트에서 VM 매핑 복구하기
-
제15장 스케줄링과 최소 프로세스 모델
- 15.1타이머 기반 컨텍스트 전환과 프로세스 스케줄링
- 15.2프로세스 모델 재정의: PCB와 TCB 분리
- 15.3fork/exec/wait 최소 프로세스 모델 확장
-
제16장 사용자 프로그램 ELF 빌드와 ABI 스택
- 16.1실제 사용자 프로그램 ELF 빌드 파이프라인
- 16.2사용자 ABI: argc/argv/envp 초기 스택 구성
-
제17장 사용자 init 실행 준비
- 17.1사용자 init 실행 직전 상태 준비
- 17.2런타임 통합: /sbin/init 적재와 실행 진입 연결
- 17.3첫 U-Mode 진입: sret로 user-init 실제 실행
-
제18장 첫 사용자 실행의 구조적 의미
- 18.1아키텍처 비교
- 18.2사용자 프로그램을 적재하고 실행하기까지
Part 04
제4부 문자 장치와 파일 디스크립터
-
제19장 문자 장치와 시리얼 장치
- 19.1문자 장치 추상화 기초
- 19.2시리얼 장치를 문자 장치로 연결
-
제20장 파일 디스크립터 테이블과 장치 노드
- 20.1파일 디스크립터 테이블: write(1, ...)의 의미
- 20.2VFS 네임스페이스와 장치 노드
-
제21장 open()과 프로세스 fd 컨텍스트
- 21.1open() 경로와 fd 할당
- 21.2현재 프로세스의 fd 테이블 유지하기
-
제22장 사용자 포인터 copyin과 VM 검증
- 22.1사용자 포인터가 가리키는 문자열 복사하기
- 22.2VM 권한을 확인하는 Copyin
-
제23장 write()와 프로세스 소유 I/O
- 23.1fd 기반 write() 시스템콜
- 23.2현재 프로세스의 I/O 컨텍스트
- 23.3태스크의 소속 프로세스로 I/O 컨텍스트 찾기
- 23.4프로세스 생성과 I/O 컨텍스트 연결
-
제24장 close(), read(), 콘솔 데이터 흐름
- 24.1close(fd)와 fd 생명주기
- 24.2read(fd)와 Copyout
- 24.3콘솔에서 실제 바이트 읽기
- 24.4논블로킹 읽기와 -EAGAIN
-
제25장 장치 I/O 통합과 검증
- 25.1장치 I/O 통합과 검증
Part 05
제5부 블로킹 I/O와 태스크 전환
-
제26장 블로킹 읽기와 대기 태스크 깨우기
- 26.1블로킹 읽기와 대기 큐
- 26.2시리얼 RX 이벤트로 읽기 대기 태스크 깨우기
-
제27장 대기 중인 시스템콜 뒤 실행 대상 선택
- 27.1대기 중인 시스템콜 뒤 실행 대상 선택
- 27.2대기 태스크 다음 실행 가능 태스크 선택
-
제28장 유휴 판정과 WFI
- 28.1실행 가능 태스크가 없을 때 유휴 판정
- 28.2유휴 판정과 인터럽트 대기
-
제29장 TrapFrame 복원과 트랩 스케줄링 처리
- 29.1다음 태스크의 TrapFrame 복원
- 29.2트랩 디스패치에서 다음 태스크 복원
-
제30장 트랩 런타임과 전역 스케줄러 상태
- 30.1트랩 런타임의 스케줄러 상태
- 30.2전역 트랩 런타임 상태
- 30.3트랩 디스패치에서 전역 런타임 사용
- 30.4실행 진입 태스크를 전역 런타임에 등록
-
제31장 태스크 전환 동작 검증
- 31.1태스크 전환 동작 검증
Part 06
제6부 주소 공간 전환과 루트 페이지 테이블
-
제32장 사용자 프로세스 생성 절차와 두 번째 태스크
- 32.1사용자 프로세스 공통 생성 절차
- 32.2두 번째 사용자 태스크로 전환하기
-
제33장 주소 공간 토큰과 전환 준비
- 33.1태스크 주소 공간 토큰 준비
- 33.2주소 공간 전환 적용 준비
-
제34장 satp 전환 준비와 주소 공간 점검
- 34.1SATP 적용 준비
- 34.2커널과 사용자 주소 공간 재배치
- 34.3satp 적용 전 검사
-
제35장 트랩 스택 전환과 진입 어셈블리
- 35.1커널 트랩 스택 전환 준비
- 35.2트랩 진입점의 스크래치 레지스터 교환
- 35.3트랩 진입점 어셈블리 스택 전환
-
제36장 사용자 진입점 CSR과 하드웨어 적용 허용 조건
- 36.1enter_user에서 sscratch 준비하기
- 36.2satp 하드웨어 적용 허용 조건
- 36.3사용자 실행 진입 CSR 순서
-
제37장 루트 페이지 테이블 배치와 사용자 실행 진입
- 37.1루트 페이지 테이블 저장 공간
- 37.2루트 페이지 테이블을 사용하는 사용자 실행 진입
- 37.3프로세스 루트 SATP 토큰
- 37.4루트 페이지 테이블을 사용하는 SATP 적용 순서
-
제38장 프로세스 주소 공간 루트와 satp 전환 검증
- 38.1커널 SATP 런타임 접근 검사
- 38.2프로세스 주소 공간 루트
- 38.3PCB 주소 공간 핸들
- 38.4SATP 하드웨어 적용 프로브
-
제39장 물리 프레임 기반 사용자 실행 이미지
- 39.1사용자 프레임에 보관한 이미지
- 39.2사용자 프레임을 사용하는 페이지 매핑
- 39.3사용자 프레임에 데이터 채우기
-
제40장 satp 유지와 사용자 실행·시스템콜
- 40.1SATP 적용 상태 유지
- 40.2사용자 메모리 접근 허용 조건
- 40.3첫 사용자 sret 실행과 시스템콜
-
제41장 사용자 코드 실행 검증
- 41.1사용자 코드 실행 과정 점검
Part 07
제7부 프로세스 종료와 종료 결과 회수
-
제42장 프로세스 exit 런타임 시작과 연결
- 42.1프로세스 종료 런타임 시작하기
- 42.2프로세스 종료 런타임 구성
-
제43장 프로세스 전체 종료와 다음 태스크 선택
- 43.1프로세스 전체 종료 런타임 모델
- 43.2종료 이후 다음 실행 대상 선택
-
제44장 트랩 디스패치에서 프로세스 exit 처리
- 44.1트랩에서 프로세스 exit 처리
- 44.2프로세스를 확인하는 트랩 런타임 종료 처리
-
제45장 종료 결과 회수와 wait 시스템콜
- 45.1프로세스 트랩 런타임의 종료 결과 회수
- 45.2프로세스 대기와 자식 종료 결과 회수
- 45.3wait 시스템콜 호출 연결
-
제46장 블로킹 대기와 자식 없음 판정
- 46.1블로킹 대기 깨우기
- 46.2wait 대상 자식이 없는 경우
-
제47장 프로세스 생명주기 완성
- 47.1프로세스 생명주기 완성
Part 08
제8부 프로그램 교체, 런타임 ABI와 Foundation 완성
-
제48장 프로세스 생성 시스템콜과 execve 이미지 교체
- 48.1프로세스 생성 시스템콜 연결
- 48.2execve 이미지 교체 절차
-
제49장 execve 분기와 시스템콜 진입 통합
- 49.1execve 런타임 디스패치 통합
- 49.2프로세스 시스템콜 진입 처리 통합
-
제50장 CRT, 최소 libc, stdio
- 50.1CRT, 최소 libc와 표준 입출력
-
제51장 공유 객체 로더와 argv/envp
- 51.1공유 객체 로더 런타임
- 51.2CRT 진입점, 인자와 환경 변수
-
제52장 콘솔 stdin과 최소 셸
- 52.1콘솔 표준 입력을 사용자 읽기로 연결
- 52.2최소 사용자 셸
-
제53장 Foundation 부트 파일시스템과 생명주기 확인
- 53.1Foundation 부트 파일시스템
- 53.2init--자식--셸--대기
- 53.3Foundation OS 통합 검증
-
제54장 Foundation OS의 완성과 다음 단계
- 54.1Foundation OS에서 완성한 것
실습 코드는 태그로 찾아보세요
PDF와 EPUB에 표시된 코드 태그를 따라 해당 절의 구현 시점으로 이동할 수 있습니다. EPUB은 읽는 기기에 따라 쪽수가 달라져 이 목차에는 쪽번호를 표시하지 않습니다.
mmos-practice 저장소 열기 ↗