한 줄 한 줄 짜면서 익히는 러스트 프로그래밍
땅끝
2024-01-05 08:48
163
0
본문
한 줄 한 줄 짜면서 익히는 러스트 프로그래밍
도서명 : 한 줄 한 줄 짜면서 익히는 러스트 프로그래밍
저자/출판사 : 팀,맥나마라, 인사이트
쪽수 : 556쪽
출판일 : 2022-07-12
ISBN : 9788966263615
정가 : 35000
1장 러스트 소개
1.1 러스트는 어디에 사용되는가?
1.2 러스트를 실무에서 추천하기
1.3 언어 맛보기
-1.3.1 “Hello, world!” 프로그램을 편법으로 만들어 보기
-1.3.2 첫 번째 러스트 프로그램
1.4 이 책의 소스 코드 다운로드
1.5 러스트의 생김새와 느낌
1.6 러스트는 어떤 언어인가?
-1.6.1 러스트의 목표: 안전성
-1.6.2 러스트의 목표: 생산성
-1.6.3 러스트의 목표: 통제력
1.7 러스트의 큰 특징
-1.7.1 성능
-1.7.2 동시성
-1.7.3 메모리 효율성
1.8 러스트의 단점
-1.8.1 순환 데이터 구조
-1.8.2 컴파일 시간
-1.8.3 엄격성
-1.8.4 언어의 크기
-1.8.5 과대광고
1.9 TLS 보안 사례 연구
-1.9.1 하트블리드
-1.9.2 goto fail
1.10 러스트는 어디에 잘 맞을까?
-1.10.1 명령행 유틸리티
-1.10.2 데이터 처리
-1.10.3 애플리케이션 확장
-1.10.4 자원이 제한된 환경
-1.10.5 서버 애플리케이션
-1.10.6 데스크톱 애플리케이션
-1.10.7 데스크톱
-1.10.8 모바일
-1.10.9 웹
-1.10.10 시스템 프로그래밍
1.11 러스트의 숨은 특징: 커뮤니티
1.12 러스트 경구
요약
1부 러스트 언어의 특색
2장 러스트 언어의 기초
2.1 실행 프로그램 만들기
-2.1.1 rustc로 단일 파일을 컴파일하기
-2.1.2 카고로 러스트 프로젝트 컴파일하기
2.2 러스트 문법 개요
-2.2.1 변수 정의와 함수 호출
2.3 숫자
-2.3.1 정수와 부동 소수점 수
-2.3.2 이진, 팔진, 십육진법을 이용하는 정수
-2.3.3 수의 비교
-2.3.4 유리수, 복소수 그리고 다른 숫자 타입
2.4 흐름 제어
-2.4.1 for: 반복의 중심축
-2.4.2 continue: 현재 반복의 남은 부분을 건너뛰기
-2.4.3 while: 조건의 상태가 바뀔 때까지 반복하기
-2.4.4 loop: 러스트 반복 구성의 기본
-2.4.5 break: 반복문 끝내기
-2.4.6 if, if else 그리고 else: 조건 분기
-2.4.7 match: 타입 패턴 매칭
2.5 함수 정의
2.6 참조 사용
2.7 프로젝트: 망델브로 집합 출력하기
2.8 고급 함수 정의
-2.8.1 명시적인 수명 애너테이션
-2.8.2 제네릭 함수
2.9 grep-lite 만들기
2.10 배열, 슬라이스, 벡터로 리스트 만들기
-2.10.1 배열
-2.10.2 슬라이스
-2.10.3 벡터
2.11 서드 파티 코드 사용하기
-2.11.1 정규식 지원 추가하기
-2.11.2 서드 파티 크레이트의 문서를 로컬에서 생성하기
-2.11.3 rustup으로 러스트 툴체인 관리하기
2.12 명령행 인자 지원
2.13 파일에서 읽어 들이기
2.14 표준 입력에서 읽기
요약
3장 복합 데이터 타입
3.1 보통 함수를 이용하여 API를 실험하기
3.2 struct로 파일 모델링하기
3.3 impl로 구조체에 메서드 추가하기
-3.3.1 new()를 구현하여 객체 생성을 간략화하기
3.4 오류 반환
-3.4.1 알려진 전역 변수를 수정하기
-3.4.2 Result 반환 타입을 이용하기
3.5 열거형을 정의하고 사용하기
-3.5.1 내부 상태를 관리하는 데 열거형 사용하기
3.6 공통 동작을 트레이트로 정의하기
-3.6.1 Read 트레이트 만들기
-3.6.2 자신만의 타입에 std::fmt::Display 구현하기
3.7 자신이 만든 타입 공개하기
-3.7.1 비공개 데이터 보호하기
3.8 프로젝트의 인라인 문서 만들기
-3.8.1 rustdoc으로 한 소스 파일의 문서 만들기
-3.8.2 카고로 크레이트와 의존성에 대한 문서 만들기
요약
4장 수명, 소유권, 대여
4.1 모의 큐브 위성 지상 관제소 구현하기
-4.1.1 첫 번째 수명 이슈와의 조우
-4.1.2 원시 타입의 특수한 행위
4.2 이 장에서 쓰이는 그림에 대한 가이드
4.3 소유자는 무엇인가? 책임을 갖고 있는가?
4.4 소유권 이동 방식
4.5 소유권 문제 해결하기
-4.5.1 완전한 소유권이 필요하지 않을 때 참조를 사용하라
-4.5.2 오래 지속되는 값은 더 적게 사용하라
-4.5.3 값의 사본 만들기
-4.5.4 데이터를 특별한 타입으로 감싸기
요약
2부 시스템 프로그래밍 이해하기
5장 데이터 심화
5.1 비트 패턴과 타입
5.2 정수의 수명
-5.2.1 엔디언 이해하기
5.3 십진수 표현하기
5.4 부동 소수점 수
-5.4.1 f32의 내부 들여다보기
-5.4.2 부호 비트를 분리하기
-5.4.3 지수부 분리하기
-5.4.4 가수부 분리하기
-5.4.5 부동 소수점 수 해부하기
5.5 고정 소수점 수 형식
5.6 임의의 바이트로부터 난수 확률을 만들어 내기
5.7 CPU를 구현해 함수 역시 데이터임을 입증하기
-5.7.1 CPU RIA/1: 가산기
-5.7.2 CPU RIA/1 전체 코드: 가산기
-5.7.3 CPU RIA/2: 곱셈기
-5.7.4 CPU RIA/3: 호출자
-5.7.5 CPU 4: 나머지를 추가하기
요약
6장 메모리
6.1 포인터
6.2 러스트의 참조와 포인터 타입 탐험하기
-6.2.1 러스트의 원시 포인터
-6.2.2 러스트의 포인터 생태계
-6.2.3 스마트 포인터를 이루는 블록
6.3 프로그램에 데이터를 위한 메모리 제공하기
-6.3.1 스택
-6.3.2 힙
-6.3.3 동적 메모리 할당이란?
-6.3.4 동적 메모리 할당의 영향 분석하기
6.4 가상 메모리
-6.4.1 배경 설명
-6.4.2 1단계: 프로세스가 자신의 메모리를 조사하게 하기
-6.4.3 가상 주소를 물리 주소로 변환하기
-6.4.4 2단계: 운영 체제를 이용해 주소 공간을 조사하기
-6.4.5 3단계: 프로세스 메모리를 읽고 쓰기
요약
7장 파일과 저장소
7.1 파일 형식이란?
7.2 데이터 저장을 위해 독자적인 파일 형식 만들기
-7.2.1 serde와 bincode 형식으로 데이터를 디스크에 저장하기
7.3 hexdump 복제품 구현하기
7.4 러스트의 파일 작업
-7.4.1 러스트에서 파일을 열고 파일의 모드를 제어하기
-7.4.2 std::fs::Path를 사용해 타입 안전한 방법으로 파일 시스템과 상호 작용하기
7.5 로그 구조의 추가 전용 저장 구조를 가진 키-값 저장소 구현하기
-7.5.1 키-값 모델
-7.5.2 actionkv v1: 명령행 인터페이스를 가진 인메모리 키-값 저장소
7.6 actionkv v1: 프런트엔드 코드
-7.6.1 조건부 컴파일로 컴파일되는 내용을 조정하기
7.7 actionkv의 핵심 이해하기: libactionkv 크레이트
-7.7.1 ActionKV 구조체 초기화
-7.7.2 개별 레코드 처리하기
-7.7.3 다중 바이트 바이너리 데이터를 보장된 바이트 순서로 디스크에 쓰기
-7.7.4 I/O 에러를 체크섬으로 검증하기
-7.7.5 기존 데이터베이스에 새로운 키-값 쌍 삽입하기
-7.7.6 actionkv 전체 코드
-7.7.7 HashMap과 BTreeMap으로 키와 값을 다루기
-7.7.8 HashMap 생성과 값 채우기
-7.7.9 HashMap과 BTreeMap에서 값을 검색하기
-7.7.10 HashMap과 BTreeMap 중 하나를 고르기
-7.7.11 actionkv v2.0에 데이터베이스 색인 추가하기
요약
8장 네트워킹
8.1 일곱 단락으로 네트워크 요약하기
8.2 reqwest를 이용하여 HTTP GET 요청 만들기
8.3 트레이트 객체
-8.3.1 트레이트 객체로 무엇이 가능한가?
-8.3.2 트레이트 객체는 무엇인가? 319
-8.3.3 작은 롤플레잉 게임 만들기: rpg 프로젝트
8.4 TCP
-8.4.1 포트 번호란?
-8.4.2 호스트 이름을 IP 주소로 바꾸기
8.5 라이브러리에 대한 인간 공학적 오류 처리
-8.5.1 문제: 다양한 에러 타입의 반환이 불가능하다
-8.5.2 다운스트림 오류를 독자적인 오류 타입을 정의하여 감싸기
-8.5.3 unwrap()과 expect()로 속이기
8.6 MAC 주소
-8.6.1 MAC 주소 생성하기
8.7 러스트의 열거형으로 상태 기계 구현하기
8.8 원시 TCP
8.9 가상 네트워킹 장치 만들기
8.10 ‘원시’ HTTP
요약
9장 시간과 시간 관리
9.1 배경지식
9.2 시간의 원천
9.3 정의
9.4 시간 인코딩하기
-9.4.1 시간대 표현하기
9.5 clock v0.1.0: 시간을 알리는 방법을 애플리케이션에 가르치기
9.6 clock v0.1.1: ISO 8601과 이메일 표준을 준수하도록 타임스탬프 형식화하기
-9.6.1 더 다양한 아키텍처를 지원하도록 clock v0.1.0 코드 리팩터링
-9.6.2 시간 형식화하기
-9.6.3 완전한 명령행 인터페이스 제공하기
-9.6.4 clock v0.1.1: 전체 프로젝트
9.7 clock v0.1.2: 시간 설정
-9.7.1 공통 동작
-9.7.2 libc를 이용하는 운영 체제에서 시간 설정하기
-9.7.3 마이크로소프트 윈도우에서 시간 설정
-9.7.4 clock v0.1.2: 전체 코드
9.8 오류 처리 향상시키기
9.9 clock 0.1.3: 네트워크 시간 프로토콜로 클록 간 차이 해결하기
-9.9.1 NTP 요청을 보내고 응답을 해석하기
-9.9.2 서버 응답에 따른 로컬 시간 조정
-9.9.3 다른 정밀도와 기원을 사용하는 시간 표현 간 변환
-9.9.4 clock v0.1.3: 전체 코드
요약
10장 프로세스, 스레드, 컨테이너
10.1 익명 함수
10.2 스레드 생성하기
-10.2.1 클로저 소개
-10.2.2 스레드 생성하기
-10.2.3 적은 스레드를 생성했을 때의 영향
-10.2.4 많은 스레드를 생성했을 때의 영향
-10.2.5 결과 재현하기
-10.2.6 공유 변수
10.3 클로저와 함수의 차이
10.4 다중 스레드 파서와 코드 생성기에서 절차적으로 생성된 아바타
-10.4.1 render-hex와 해당 출력을 실행하는 방법
-10.4.2 단일 스레드 render-hex 오버뷰
-10.4.3 논리적 작업별 스레드 생성
-10.4.4 스레드 풀과 작업 대기열 이용하기
10.5 동시성과 작업 가상화
-10.5.1 스레드
-10.5.2 콘텍스트 전환이란?
-10.5.3 프로세스
-10.5.4 웹어셈블리
-10.5.5 컨테이너
-10.5.6 결국 운영 체제를 사용하는 이유는 무엇인가?
요약
11장 커널
11.1 신생 운영 체제 FledgeOS
-11.1.1 운영 체제 커널 개발을 위한 개발 환경 구축하기
-11.1.2 개발 환경 검증하기
11.2 Fledgeos-0: 뭔가 동작하게 하기
-11.2.1 첫 부팅
-11.2.2 컴파일 방법
-11.2.3 소스 코드 목록
-11.2.4 패닉 처리
-11.2.5 VGA 호환 텍스트 모드로 화면에 쓰기
-11.2.6 _start(): FledgeOS용 main() 함수
11.3 fledgeos-1: 바쁜 루프 피하기
-11.3.1 CPU와 직접 상호 작용하여 전력 소모 줄이기
-11.3.2 fledgeos-1 소스 코드
11.4 fledgeos-2: 커스텀 예외 처리
-11.4.1 예외를 거의 제대로 처리하기
-11.4.2 fledgeos-2 소스 코드
11.5 fledgeos-3: 텍스트 출력
-11.5.1 화면에 색깔 있는 텍스트 쓰기
-11.5.2 열거형의 메모리 내 표현 제어
-11.5.3 왜 열거형을 쓰는가?
-11.5.4 VGA 프레임 버퍼에 출력할 수 있는 타입 만들기
-11.5.5 화면에 출력하기
-11.5.6 fledgeos-3 소스 코드
11.6 fledgeos-4: 커스텀 패닉 처리
-11.6.1 사용자에게 오류를 보고하도록 패닉 핸들러 구현하기
-11.6.2 core::fmt::Write를 사용해서 panic() 재구현하기
-11.6.3 core::fmt::Write 구현하기
-11.6.4 fledge-4 소스 코드
요약
12장 시그널, 인터럽트, 예외
12.1 용어
-12.1.1 시그널 대 인터럽트
12.2 인터럽트는 애플리케이션에 어떻게 영향을 끼치는가?
12.3 소프트웨어 인터럽트
12.4 하드웨어 인터럽트
12.5 시그널 처리
-12.5.1 기본 동작
-12.5.2 프로그램 작업 일시 중단 및 재개
-12.5.3 운영 체제에서 지원하는 모든 시그널의 목록
12.6 사용자 지정 작업으로 시그널 처리
-12.6.1 러스트에서의 전역 변수
-12.6.2 종료가 시작됐음을 나타내는 전역 변수 사용
12.7 애플리케이션 정의 시그널 보내기
-12.7.1 함수 포인터와 해당 구문 이해
12.8 시그널 무시하기
12.9 깊이 중첩된 호출 스택으로부터 종료하기
-12.9.1 sjlj 프로젝트 소개
-12.9.2 프로그램에 내장 함수 설정하기
-12.9.3 포인터를 또 다른 타입으로 변환하기
-12.9.4 sjlj 프로젝트 컴파일하기
-12.9.5 sjlj 프로젝트 소스 코드
12.10 시그널이 없는 플랫폼에 이러한 기술을 적용하는 방법에 대한 참고 사항
12.11 예외 복습하기
요약
도서명 : 한 줄 한 줄 짜면서 익히는 러스트 프로그래밍
저자/출판사 : 팀,맥나마라, 인사이트
쪽수 : 556쪽
출판일 : 2022-07-12
ISBN : 9788966263615
정가 : 35000
1장 러스트 소개
1.1 러스트는 어디에 사용되는가?
1.2 러스트를 실무에서 추천하기
1.3 언어 맛보기
-1.3.1 “Hello, world!” 프로그램을 편법으로 만들어 보기
-1.3.2 첫 번째 러스트 프로그램
1.4 이 책의 소스 코드 다운로드
1.5 러스트의 생김새와 느낌
1.6 러스트는 어떤 언어인가?
-1.6.1 러스트의 목표: 안전성
-1.6.2 러스트의 목표: 생산성
-1.6.3 러스트의 목표: 통제력
1.7 러스트의 큰 특징
-1.7.1 성능
-1.7.2 동시성
-1.7.3 메모리 효율성
1.8 러스트의 단점
-1.8.1 순환 데이터 구조
-1.8.2 컴파일 시간
-1.8.3 엄격성
-1.8.4 언어의 크기
-1.8.5 과대광고
1.9 TLS 보안 사례 연구
-1.9.1 하트블리드
-1.9.2 goto fail
1.10 러스트는 어디에 잘 맞을까?
-1.10.1 명령행 유틸리티
-1.10.2 데이터 처리
-1.10.3 애플리케이션 확장
-1.10.4 자원이 제한된 환경
-1.10.5 서버 애플리케이션
-1.10.6 데스크톱 애플리케이션
-1.10.7 데스크톱
-1.10.8 모바일
-1.10.9 웹
-1.10.10 시스템 프로그래밍
1.11 러스트의 숨은 특징: 커뮤니티
1.12 러스트 경구
요약
1부 러스트 언어의 특색
2장 러스트 언어의 기초
2.1 실행 프로그램 만들기
-2.1.1 rustc로 단일 파일을 컴파일하기
-2.1.2 카고로 러스트 프로젝트 컴파일하기
2.2 러스트 문법 개요
-2.2.1 변수 정의와 함수 호출
2.3 숫자
-2.3.1 정수와 부동 소수점 수
-2.3.2 이진, 팔진, 십육진법을 이용하는 정수
-2.3.3 수의 비교
-2.3.4 유리수, 복소수 그리고 다른 숫자 타입
2.4 흐름 제어
-2.4.1 for: 반복의 중심축
-2.4.2 continue: 현재 반복의 남은 부분을 건너뛰기
-2.4.3 while: 조건의 상태가 바뀔 때까지 반복하기
-2.4.4 loop: 러스트 반복 구성의 기본
-2.4.5 break: 반복문 끝내기
-2.4.6 if, if else 그리고 else: 조건 분기
-2.4.7 match: 타입 패턴 매칭
2.5 함수 정의
2.6 참조 사용
2.7 프로젝트: 망델브로 집합 출력하기
2.8 고급 함수 정의
-2.8.1 명시적인 수명 애너테이션
-2.8.2 제네릭 함수
2.9 grep-lite 만들기
2.10 배열, 슬라이스, 벡터로 리스트 만들기
-2.10.1 배열
-2.10.2 슬라이스
-2.10.3 벡터
2.11 서드 파티 코드 사용하기
-2.11.1 정규식 지원 추가하기
-2.11.2 서드 파티 크레이트의 문서를 로컬에서 생성하기
-2.11.3 rustup으로 러스트 툴체인 관리하기
2.12 명령행 인자 지원
2.13 파일에서 읽어 들이기
2.14 표준 입력에서 읽기
요약
3장 복합 데이터 타입
3.1 보통 함수를 이용하여 API를 실험하기
3.2 struct로 파일 모델링하기
3.3 impl로 구조체에 메서드 추가하기
-3.3.1 new()를 구현하여 객체 생성을 간략화하기
3.4 오류 반환
-3.4.1 알려진 전역 변수를 수정하기
-3.4.2 Result 반환 타입을 이용하기
3.5 열거형을 정의하고 사용하기
-3.5.1 내부 상태를 관리하는 데 열거형 사용하기
3.6 공통 동작을 트레이트로 정의하기
-3.6.1 Read 트레이트 만들기
-3.6.2 자신만의 타입에 std::fmt::Display 구현하기
3.7 자신이 만든 타입 공개하기
-3.7.1 비공개 데이터 보호하기
3.8 프로젝트의 인라인 문서 만들기
-3.8.1 rustdoc으로 한 소스 파일의 문서 만들기
-3.8.2 카고로 크레이트와 의존성에 대한 문서 만들기
요약
4장 수명, 소유권, 대여
4.1 모의 큐브 위성 지상 관제소 구현하기
-4.1.1 첫 번째 수명 이슈와의 조우
-4.1.2 원시 타입의 특수한 행위
4.2 이 장에서 쓰이는 그림에 대한 가이드
4.3 소유자는 무엇인가? 책임을 갖고 있는가?
4.4 소유권 이동 방식
4.5 소유권 문제 해결하기
-4.5.1 완전한 소유권이 필요하지 않을 때 참조를 사용하라
-4.5.2 오래 지속되는 값은 더 적게 사용하라
-4.5.3 값의 사본 만들기
-4.5.4 데이터를 특별한 타입으로 감싸기
요약
2부 시스템 프로그래밍 이해하기
5장 데이터 심화
5.1 비트 패턴과 타입
5.2 정수의 수명
-5.2.1 엔디언 이해하기
5.3 십진수 표현하기
5.4 부동 소수점 수
-5.4.1 f32의 내부 들여다보기
-5.4.2 부호 비트를 분리하기
-5.4.3 지수부 분리하기
-5.4.4 가수부 분리하기
-5.4.5 부동 소수점 수 해부하기
5.5 고정 소수점 수 형식
5.6 임의의 바이트로부터 난수 확률을 만들어 내기
5.7 CPU를 구현해 함수 역시 데이터임을 입증하기
-5.7.1 CPU RIA/1: 가산기
-5.7.2 CPU RIA/1 전체 코드: 가산기
-5.7.3 CPU RIA/2: 곱셈기
-5.7.4 CPU RIA/3: 호출자
-5.7.5 CPU 4: 나머지를 추가하기
요약
6장 메모리
6.1 포인터
6.2 러스트의 참조와 포인터 타입 탐험하기
-6.2.1 러스트의 원시 포인터
-6.2.2 러스트의 포인터 생태계
-6.2.3 스마트 포인터를 이루는 블록
6.3 프로그램에 데이터를 위한 메모리 제공하기
-6.3.1 스택
-6.3.2 힙
-6.3.3 동적 메모리 할당이란?
-6.3.4 동적 메모리 할당의 영향 분석하기
6.4 가상 메모리
-6.4.1 배경 설명
-6.4.2 1단계: 프로세스가 자신의 메모리를 조사하게 하기
-6.4.3 가상 주소를 물리 주소로 변환하기
-6.4.4 2단계: 운영 체제를 이용해 주소 공간을 조사하기
-6.4.5 3단계: 프로세스 메모리를 읽고 쓰기
요약
7장 파일과 저장소
7.1 파일 형식이란?
7.2 데이터 저장을 위해 독자적인 파일 형식 만들기
-7.2.1 serde와 bincode 형식으로 데이터를 디스크에 저장하기
7.3 hexdump 복제품 구현하기
7.4 러스트의 파일 작업
-7.4.1 러스트에서 파일을 열고 파일의 모드를 제어하기
-7.4.2 std::fs::Path를 사용해 타입 안전한 방법으로 파일 시스템과 상호 작용하기
7.5 로그 구조의 추가 전용 저장 구조를 가진 키-값 저장소 구현하기
-7.5.1 키-값 모델
-7.5.2 actionkv v1: 명령행 인터페이스를 가진 인메모리 키-값 저장소
7.6 actionkv v1: 프런트엔드 코드
-7.6.1 조건부 컴파일로 컴파일되는 내용을 조정하기
7.7 actionkv의 핵심 이해하기: libactionkv 크레이트
-7.7.1 ActionKV 구조체 초기화
-7.7.2 개별 레코드 처리하기
-7.7.3 다중 바이트 바이너리 데이터를 보장된 바이트 순서로 디스크에 쓰기
-7.7.4 I/O 에러를 체크섬으로 검증하기
-7.7.5 기존 데이터베이스에 새로운 키-값 쌍 삽입하기
-7.7.6 actionkv 전체 코드
-7.7.7 HashMap과 BTreeMap으로 키와 값을 다루기
-7.7.8 HashMap 생성과 값 채우기
-7.7.9 HashMap과 BTreeMap에서 값을 검색하기
-7.7.10 HashMap과 BTreeMap 중 하나를 고르기
-7.7.11 actionkv v2.0에 데이터베이스 색인 추가하기
요약
8장 네트워킹
8.1 일곱 단락으로 네트워크 요약하기
8.2 reqwest를 이용하여 HTTP GET 요청 만들기
8.3 트레이트 객체
-8.3.1 트레이트 객체로 무엇이 가능한가?
-8.3.2 트레이트 객체는 무엇인가? 319
-8.3.3 작은 롤플레잉 게임 만들기: rpg 프로젝트
8.4 TCP
-8.4.1 포트 번호란?
-8.4.2 호스트 이름을 IP 주소로 바꾸기
8.5 라이브러리에 대한 인간 공학적 오류 처리
-8.5.1 문제: 다양한 에러 타입의 반환이 불가능하다
-8.5.2 다운스트림 오류를 독자적인 오류 타입을 정의하여 감싸기
-8.5.3 unwrap()과 expect()로 속이기
8.6 MAC 주소
-8.6.1 MAC 주소 생성하기
8.7 러스트의 열거형으로 상태 기계 구현하기
8.8 원시 TCP
8.9 가상 네트워킹 장치 만들기
8.10 ‘원시’ HTTP
요약
9장 시간과 시간 관리
9.1 배경지식
9.2 시간의 원천
9.3 정의
9.4 시간 인코딩하기
-9.4.1 시간대 표현하기
9.5 clock v0.1.0: 시간을 알리는 방법을 애플리케이션에 가르치기
9.6 clock v0.1.1: ISO 8601과 이메일 표준을 준수하도록 타임스탬프 형식화하기
-9.6.1 더 다양한 아키텍처를 지원하도록 clock v0.1.0 코드 리팩터링
-9.6.2 시간 형식화하기
-9.6.3 완전한 명령행 인터페이스 제공하기
-9.6.4 clock v0.1.1: 전체 프로젝트
9.7 clock v0.1.2: 시간 설정
-9.7.1 공통 동작
-9.7.2 libc를 이용하는 운영 체제에서 시간 설정하기
-9.7.3 마이크로소프트 윈도우에서 시간 설정
-9.7.4 clock v0.1.2: 전체 코드
9.8 오류 처리 향상시키기
9.9 clock 0.1.3: 네트워크 시간 프로토콜로 클록 간 차이 해결하기
-9.9.1 NTP 요청을 보내고 응답을 해석하기
-9.9.2 서버 응답에 따른 로컬 시간 조정
-9.9.3 다른 정밀도와 기원을 사용하는 시간 표현 간 변환
-9.9.4 clock v0.1.3: 전체 코드
요약
10장 프로세스, 스레드, 컨테이너
10.1 익명 함수
10.2 스레드 생성하기
-10.2.1 클로저 소개
-10.2.2 스레드 생성하기
-10.2.3 적은 스레드를 생성했을 때의 영향
-10.2.4 많은 스레드를 생성했을 때의 영향
-10.2.5 결과 재현하기
-10.2.6 공유 변수
10.3 클로저와 함수의 차이
10.4 다중 스레드 파서와 코드 생성기에서 절차적으로 생성된 아바타
-10.4.1 render-hex와 해당 출력을 실행하는 방법
-10.4.2 단일 스레드 render-hex 오버뷰
-10.4.3 논리적 작업별 스레드 생성
-10.4.4 스레드 풀과 작업 대기열 이용하기
10.5 동시성과 작업 가상화
-10.5.1 스레드
-10.5.2 콘텍스트 전환이란?
-10.5.3 프로세스
-10.5.4 웹어셈블리
-10.5.5 컨테이너
-10.5.6 결국 운영 체제를 사용하는 이유는 무엇인가?
요약
11장 커널
11.1 신생 운영 체제 FledgeOS
-11.1.1 운영 체제 커널 개발을 위한 개발 환경 구축하기
-11.1.2 개발 환경 검증하기
11.2 Fledgeos-0: 뭔가 동작하게 하기
-11.2.1 첫 부팅
-11.2.2 컴파일 방법
-11.2.3 소스 코드 목록
-11.2.4 패닉 처리
-11.2.5 VGA 호환 텍스트 모드로 화면에 쓰기
-11.2.6 _start(): FledgeOS용 main() 함수
11.3 fledgeos-1: 바쁜 루프 피하기
-11.3.1 CPU와 직접 상호 작용하여 전력 소모 줄이기
-11.3.2 fledgeos-1 소스 코드
11.4 fledgeos-2: 커스텀 예외 처리
-11.4.1 예외를 거의 제대로 처리하기
-11.4.2 fledgeos-2 소스 코드
11.5 fledgeos-3: 텍스트 출력
-11.5.1 화면에 색깔 있는 텍스트 쓰기
-11.5.2 열거형의 메모리 내 표현 제어
-11.5.3 왜 열거형을 쓰는가?
-11.5.4 VGA 프레임 버퍼에 출력할 수 있는 타입 만들기
-11.5.5 화면에 출력하기
-11.5.6 fledgeos-3 소스 코드
11.6 fledgeos-4: 커스텀 패닉 처리
-11.6.1 사용자에게 오류를 보고하도록 패닉 핸들러 구현하기
-11.6.2 core::fmt::Write를 사용해서 panic() 재구현하기
-11.6.3 core::fmt::Write 구현하기
-11.6.4 fledge-4 소스 코드
요약
12장 시그널, 인터럽트, 예외
12.1 용어
-12.1.1 시그널 대 인터럽트
12.2 인터럽트는 애플리케이션에 어떻게 영향을 끼치는가?
12.3 소프트웨어 인터럽트
12.4 하드웨어 인터럽트
12.5 시그널 처리
-12.5.1 기본 동작
-12.5.2 프로그램 작업 일시 중단 및 재개
-12.5.3 운영 체제에서 지원하는 모든 시그널의 목록
12.6 사용자 지정 작업으로 시그널 처리
-12.6.1 러스트에서의 전역 변수
-12.6.2 종료가 시작됐음을 나타내는 전역 변수 사용
12.7 애플리케이션 정의 시그널 보내기
-12.7.1 함수 포인터와 해당 구문 이해
12.8 시그널 무시하기
12.9 깊이 중첩된 호출 스택으로부터 종료하기
-12.9.1 sjlj 프로젝트 소개
-12.9.2 프로그램에 내장 함수 설정하기
-12.9.3 포인터를 또 다른 타입으로 변환하기
-12.9.4 sjlj 프로젝트 컴파일하기
-12.9.5 sjlj 프로젝트 소스 코드
12.10 시그널이 없는 플랫폼에 이러한 기술을 적용하는 방법에 대한 참고 사항
12.11 예외 복습하기
요약
댓글목록0