← MMOS 소개로 돌아가기

RISC-V OS Foundations · Volume 01

제1권 상세 목차

『직접 만들며 배우는 RISC-V 운영체제』 중간본의 8부·54장·112절 구성입니다. 부팅부터 사용자 셸까지 구현 순서대로 읽거나, 필요한 장으로 바로 이동할 수 있습니다.

Part 01

제1부 실행 환경과 첫 커널

  1. 제1장 책의 목표와 재현 가능한 개발 환경

    1. 1.1서론
    2. 1.2개발 환경
  2. 제2장 RISC-V 부팅 순서와 커널 이미지

    1. 2.1부팅 순서
  3. 제3장 커널 브링업과 초기 실행 상태

    1. 3.1커널 브링업 기초
  4. 제4장 UART 콘솔과 관찰 가능한 커널

    1. 4.1초기 콘솔 브링업 (UART)
  5. 제5장 초기 메모리 관리와 디바이스 트리

    1. 5.1메모리 관리와 디바이스 트리
  6. 제6장 U-Boot, 저장장치, 부트 이미지

    1. 6.1U-Boot, 저장장치, 부트 이미지
  7. 제7장 테스트와 디버깅으로 동작 확인하기

    1. 7.1테스트와 디버깅

Part 02

제2부 사용자 모드와 트랩 기반

  1. 제8장 사용자 모드 전환을 위한 권한과 CSR

    1. 8.1모드 전환과 사용자 초기 프로세스
  2. 제9장 트랩 디스패치와 시스템콜 ABI

    1. 9.1트랩 디스패치와 시스템콜
  3. 제10장 Sv39 페이지 테이블과 사용자 init 컨텍스트

    1. 10.1Sv39 커널 페이지 테이블
    2. 10.2사용자 init 프로세스 브링업
  4. 제11장 사용자 모드 실행 검증과 남은 과제

    1. 11.1사용자 모드 준비에서 파일 실행 준비로

Part 03

제3부 저장장치, ELF와 첫 사용자 프로그램

  1. 제12장 블록 장치와 파일시스템 읽기

    1. 12.1커널 장치 모델과 블록 디바이스 기초
    2. 12.2커널에서 파일 내용을 읽기
  2. 제13장 시스템콜 기반과 ELF 실행 준비

    1. 13.1시스템콜 프레임워크와 프로세스 진입 준비
    2. 13.2ELF 로더 구현과 exec 준비
  3. 제14장 /sbin/init 적재와 사용자 VM

    1. 14.1exec 준비: /sbin/init 적재와 사용자 진입 컨텍스트 구성
    2. 14.2사용자 페이지 폴트에서 VM 매핑 복구하기
  4. 제15장 스케줄링과 최소 프로세스 모델

    1. 15.1타이머 기반 컨텍스트 전환과 프로세스 스케줄링
    2. 15.2프로세스 모델 재정의: PCB와 TCB 분리
    3. 15.3fork/exec/wait 최소 프로세스 모델 확장
  5. 제16장 사용자 프로그램 ELF 빌드와 ABI 스택

    1. 16.1실제 사용자 프로그램 ELF 빌드 파이프라인
    2. 16.2사용자 ABI: argc/argv/envp 초기 스택 구성
  6. 제17장 사용자 init 실행 준비

    1. 17.1사용자 init 실행 직전 상태 준비
    2. 17.2런타임 통합: /sbin/init 적재와 실행 진입 연결
    3. 17.3첫 U-Mode 진입: sret로 user-init 실제 실행
  7. 제18장 첫 사용자 실행의 구조적 의미

    1. 18.1아키텍처 비교
    2. 18.2사용자 프로그램을 적재하고 실행하기까지

Part 04

제4부 문자 장치와 파일 디스크립터

  1. 제19장 문자 장치와 시리얼 장치

    1. 19.1문자 장치 추상화 기초
    2. 19.2시리얼 장치를 문자 장치로 연결
  2. 제20장 파일 디스크립터 테이블과 장치 노드

    1. 20.1파일 디스크립터 테이블: write(1, ...)의 의미
    2. 20.2VFS 네임스페이스와 장치 노드
  3. 제21장 open()과 프로세스 fd 컨텍스트

    1. 21.1open() 경로와 fd 할당
    2. 21.2현재 프로세스의 fd 테이블 유지하기
  4. 제22장 사용자 포인터 copyin과 VM 검증

    1. 22.1사용자 포인터가 가리키는 문자열 복사하기
    2. 22.2VM 권한을 확인하는 Copyin
  5. 제23장 write()와 프로세스 소유 I/O

    1. 23.1fd 기반 write() 시스템콜
    2. 23.2현재 프로세스의 I/O 컨텍스트
    3. 23.3태스크의 소속 프로세스로 I/O 컨텍스트 찾기
    4. 23.4프로세스 생성과 I/O 컨텍스트 연결
  6. 제24장 close(), read(), 콘솔 데이터 흐름

    1. 24.1close(fd)와 fd 생명주기
    2. 24.2read(fd)와 Copyout
    3. 24.3콘솔에서 실제 바이트 읽기
    4. 24.4논블로킹 읽기와 -EAGAIN
  7. 제25장 장치 I/O 통합과 검증

    1. 25.1장치 I/O 통합과 검증

Part 05

제5부 블로킹 I/O와 태스크 전환

  1. 제26장 블로킹 읽기와 대기 태스크 깨우기

    1. 26.1블로킹 읽기와 대기 큐
    2. 26.2시리얼 RX 이벤트로 읽기 대기 태스크 깨우기
  2. 제27장 대기 중인 시스템콜 뒤 실행 대상 선택

    1. 27.1대기 중인 시스템콜 뒤 실행 대상 선택
    2. 27.2대기 태스크 다음 실행 가능 태스크 선택
  3. 제28장 유휴 판정과 WFI

    1. 28.1실행 가능 태스크가 없을 때 유휴 판정
    2. 28.2유휴 판정과 인터럽트 대기
  4. 제29장 TrapFrame 복원과 트랩 스케줄링 처리

    1. 29.1다음 태스크의 TrapFrame 복원
    2. 29.2트랩 디스패치에서 다음 태스크 복원
  5. 제30장 트랩 런타임과 전역 스케줄러 상태

    1. 30.1트랩 런타임의 스케줄러 상태
    2. 30.2전역 트랩 런타임 상태
    3. 30.3트랩 디스패치에서 전역 런타임 사용
    4. 30.4실행 진입 태스크를 전역 런타임에 등록
  6. 제31장 태스크 전환 동작 검증

    1. 31.1태스크 전환 동작 검증

Part 06

제6부 주소 공간 전환과 루트 페이지 테이블

  1. 제32장 사용자 프로세스 생성 절차와 두 번째 태스크

    1. 32.1사용자 프로세스 공통 생성 절차
    2. 32.2두 번째 사용자 태스크로 전환하기
  2. 제33장 주소 공간 토큰과 전환 준비

    1. 33.1태스크 주소 공간 토큰 준비
    2. 33.2주소 공간 전환 적용 준비
  3. 제34장 satp 전환 준비와 주소 공간 점검

    1. 34.1SATP 적용 준비
    2. 34.2커널과 사용자 주소 공간 재배치
    3. 34.3satp 적용 전 검사
  4. 제35장 트랩 스택 전환과 진입 어셈블리

    1. 35.1커널 트랩 스택 전환 준비
    2. 35.2트랩 진입점의 스크래치 레지스터 교환
    3. 35.3트랩 진입점 어셈블리 스택 전환
  5. 제36장 사용자 진입점 CSR과 하드웨어 적용 허용 조건

    1. 36.1enter_user에서 sscratch 준비하기
    2. 36.2satp 하드웨어 적용 허용 조건
    3. 36.3사용자 실행 진입 CSR 순서
  6. 제37장 루트 페이지 테이블 배치와 사용자 실행 진입

    1. 37.1루트 페이지 테이블 저장 공간
    2. 37.2루트 페이지 테이블을 사용하는 사용자 실행 진입
    3. 37.3프로세스 루트 SATP 토큰
    4. 37.4루트 페이지 테이블을 사용하는 SATP 적용 순서
  7. 제38장 프로세스 주소 공간 루트와 satp 전환 검증

    1. 38.1커널 SATP 런타임 접근 검사
    2. 38.2프로세스 주소 공간 루트
    3. 38.3PCB 주소 공간 핸들
    4. 38.4SATP 하드웨어 적용 프로브
  8. 제39장 물리 프레임 기반 사용자 실행 이미지

    1. 39.1사용자 프레임에 보관한 이미지
    2. 39.2사용자 프레임을 사용하는 페이지 매핑
    3. 39.3사용자 프레임에 데이터 채우기
  9. 제40장 satp 유지와 사용자 실행·시스템콜

    1. 40.1SATP 적용 상태 유지
    2. 40.2사용자 메모리 접근 허용 조건
    3. 40.3첫 사용자 sret 실행과 시스템콜
  10. 제41장 사용자 코드 실행 검증

    1. 41.1사용자 코드 실행 과정 점검

Part 07

제7부 프로세스 종료와 종료 결과 회수

  1. 제42장 프로세스 exit 런타임 시작과 연결

    1. 42.1프로세스 종료 런타임 시작하기
    2. 42.2프로세스 종료 런타임 구성
  2. 제43장 프로세스 전체 종료와 다음 태스크 선택

    1. 43.1프로세스 전체 종료 런타임 모델
    2. 43.2종료 이후 다음 실행 대상 선택
  3. 제44장 트랩 디스패치에서 프로세스 exit 처리

    1. 44.1트랩에서 프로세스 exit 처리
    2. 44.2프로세스를 확인하는 트랩 런타임 종료 처리
  4. 제45장 종료 결과 회수와 wait 시스템콜

    1. 45.1프로세스 트랩 런타임의 종료 결과 회수
    2. 45.2프로세스 대기와 자식 종료 결과 회수
    3. 45.3wait 시스템콜 호출 연결
  5. 제46장 블로킹 대기와 자식 없음 판정

    1. 46.1블로킹 대기 깨우기
    2. 46.2wait 대상 자식이 없는 경우
  6. 제47장 프로세스 생명주기 완성

    1. 47.1프로세스 생명주기 완성

Part 08

제8부 프로그램 교체, 런타임 ABI와 Foundation 완성

  1. 제48장 프로세스 생성 시스템콜과 execve 이미지 교체

    1. 48.1프로세스 생성 시스템콜 연결
    2. 48.2execve 이미지 교체 절차
  2. 제49장 execve 분기와 시스템콜 진입 통합

    1. 49.1execve 런타임 디스패치 통합
    2. 49.2프로세스 시스템콜 진입 처리 통합
  3. 제50장 CRT, 최소 libc, stdio

    1. 50.1CRT, 최소 libc와 표준 입출력
  4. 제51장 공유 객체 로더와 argv/envp

    1. 51.1공유 객체 로더 런타임
    2. 51.2CRT 진입점, 인자와 환경 변수
  5. 제52장 콘솔 stdin과 최소 셸

    1. 52.1콘솔 표준 입력을 사용자 읽기로 연결
    2. 52.2최소 사용자 셸
  6. 제53장 Foundation 부트 파일시스템과 생명주기 확인

    1. 53.1Foundation 부트 파일시스템
    2. 53.2init--자식--셸--대기
    3. 53.3Foundation OS 통합 검증
  7. 제54장 Foundation OS의 완성과 다음 단계

    1. 54.1Foundation OS에서 완성한 것

실습 코드는 태그로 찾아보세요

PDF와 EPUB에 표시된 코드 태그를 따라 해당 절의 구현 시점으로 이동할 수 있습니다. EPUB은 읽는 기기에 따라 쪽수가 달라져 이 목차에는 쪽번호를 표시하지 않습니다.

mmos-practice 저장소 열기 ↗