2권 - IT EXPERT, 64비트 멀티코어 OS 원리와 구조
33장 태스크를 분산시켜 멀티코어 프로세서를 100% 활용하자
33.1 태스크 분산 처리 알고리즘과 자료구조 설계
33.1.1 가장 기본적인 형태, 공용 스케줄러 방식
33.1.2 더 진보된 형태, 개별 스케줄러 방식
33.2 태스크 분산 처리를 위한 자료구조 설계와 구현
33.2.1 스케줄러 자료구조, 태스크 풀 자료구조, 태스크 자료구조 수정
33.2.2 태스크 풀 초기화/할당/해제 함수 수정
33.2.3 스케줄러 초기화 함수 수정
33.2.4 태스크 생성 함수 수정
33.2.5 부하 분산을 고려한 태스크 생성 함수 추가
33.2.6 스케줄러 함수 수정
33.2.7 친화도 설정 함수 추가와 우선순위 및 종료 관련 함수 수정
33.2.8 태스크 부하 분산 설정 함수 추가
33.2.9 뮤텍스 함수와 인터럽트 핸들러 코드 수정
33.2.10 C 언어 커널 엔트리 포인트 함수와 기타 태스크 생성 코드 수정
33.3 태스크 분산 처리 기능 통합과 빌드
33.3.1 태스크 파일 수정
33.3.2 인터럽트 핸들러 파일과 동기화 파일 수정
33.3.3 C 언어 커널 엔트리 포인트 파일 수정
33.3.4 콘솔 셸 파일 수정
33.3.5 빌드와 테스트
7부 GUI 시스템과 GUI
34장 텍스트 모드에서 그래픽 모드로 전환하자
34.1 그래픽 컨트롤러와 VBE의 관계
34.1.1 그래픽 컨트롤러와 VESA
34.1.2 VBE와 선형 프레임 버퍼
34.2 VBE를 통한 선형 프레임 버퍼 모드 전환
34.2.1 VBE와 BIOS 인터럽트 서비스
34.2.2 선형 프레임 버퍼를 지원하는 그래픽 모드로 전환
34.2.3 그래픽 모드로 전환
34.2.4 화면에 색깔 채우기
34.3 그래픽 모드 전환 기능 통합과 빌드
34.3.1 VBE 파일 추가
34.3.2 부트 로더 파일 수정
34.3.3 C 언어 커널 엔트리 포인트 파일 수정
34.3.4 콘솔 셸 파일 수정
34.3.5 빌드와 테스트
35장 2D 그래픽 라이브러리를 만들자
35.1 점, 선, 사각형, 원 그리기
35.1.1 가장 기본 단위, 점 그리기
35.1.2 다른 도형의 기초가 되는 선 그리기
35.1.3 엣지의 대명사, 사각형 그리기
35.1.4 곡선의 미학, 원 그리기
35.2 문자 출력과 폰트
35.2.1 폰트와 비트맵 폰트 형식
35.2.2 폰트 메이커 프로그램과 비트맵 폰트 생성 방법
35.2.3 폰트 출력
35.3 2D 그래픽 라이브러리 통합과 빌드
35.3.1 2D 그래픽 라이브러리 파일 추가
35.3.2 영문 폰트 파일 추가
35.3.3 유틸리티 파일 수정
35.3.4 C 언어 커널 엔트리 포인트 파일 수정
35.3.5 빌드와 테스트
36장 클리핑 기능을 추가해 화면에 표시되는 영역만 그리자
36.1 클리핑 알고리즘 설계와 구현
36.1.1 비디오 메모리와 클리핑
36.1.2 점 클리핑 처리
36.1.3 직선 클리핑 처리
36.1.4 사각형 클리핑 처리와 원 클리핑 처리
36.1.5 문자 클리핑 처리
36.2 클리핑 처리 기능 통합과 빌드
36.2.1 2D 그래픽 라이브러리 파일 수정
36.2.2 C 언어 커널 엔트리 포인트 파일 수정
36.2.3 빌드와 테스트
37장 마우스 디바이스 드라이버를 추가하자
37.1 키보드 컨트롤러와 마우스의 관계
37.1.1 다시 보는 키보드 컨트롤러
37.2 마우스 제어 기능 구현
37.2.1 마우스 활성화
37.2.2 마우스 인터럽트 활성화와 마우스 인터럽트 핸들러 등록
37.2.3 마우스 데이터와 마우스 큐
37.2.4 마우스 핸들러 추가와 키보드 관련 함수 수정
37.2.5 마우스 커서 출력과 마우스 커서 이동
37.3 마우스 디바이스 드라이버 통합과 빌드
37.3.1 마우스 디바이스 드라이버 파일 추가
37.3.2 키보드 디바이스 드라이버 파일 수정
37.3.3 인터럽트 핸들러 파일 수정
37.3.4 ISR 파일 수정
37.3.5 C 언어 커널 엔트리 포인트 파일 수정
37.3.6 빌드와 테스트
38장 GUI 시스템을 설계하고 윈도우 기반 함수를 구현하자
38.1 GUI 시스템의 주요 기능과 전체 설계
38.1.1 GUI 시스템의 주요 기능
38.1.2 GUI 시스템 설계
38.2 GUI 시스템의 자료구조 설계와 구현
38.2.1 윈도우 풀 설계와 구현
38.2.2 윈도우와 윈도우 매니저의 설계 및 구현
38.2.3 윈도우 매니저 태스크 구현
38.3 GUI 시스템 API 통합과 빌드
38.3.1 윈도우 파일 추가
38.3.2 윈도우 매니저 태스크 파일 추가
38.3.3 C 언어 커널 엔트리 포인트 파일 수정
38.3.4 빌드와 테스트
39장 이벤트 큐를 도입하여 윈도우 매니저 태스크와 기반 함수를 업그레이드하자
39.1 윈도우 이벤트 큐 설계와 구현
39.1.1 이벤트 큐 설계와 자료구조 정의
39.1.2 이벤트 큐 구현
39.2 윈도우 매니저 태스크 설계 구현과 윈도우 API의 추가
39.2.1 윈도우 매니저 태스크의 주요 기능
39.2.2 마우스 입력과 마우스 이벤트 처리
39.2.3 윈도우 이벤트 처리
39.2.4 키 이벤트 처리와 화면 업데이트 처리
39.2.5 윈도우 매니저 태스크 구현
39.3 윈도우 매니저 태스크와 추가된 함수의 통합과 빌드
39.3.1 윈도우 매니저 태스크 파일 수정
39.3.2 윈도우 파일 수정
39.3.3 빌드와 테스트
40장 GUI 태스크 (1) - 기본 GUI 태스크와 Hello World GUI 태스크
40.1 GUI 태스크의 기본 구조와 Hello World GUI 태스크 구현
40.1.1 기본 GUI 태스크의 구조와 구현
40.1.2 Hello World GUI 태스크 구현 - 이벤트 정보 영역 추가
40.1.3 Hello World GUI 태스크 - 이벤트 전송 버튼과 유저 이벤트 전송 기능 추가
40.2 GUI 태스크 코드 통합과 빌드
40.2.1 GUI 태스크 파일 추가
40.2.2 윈도우 매니저 태스크 파일 수정
40.2.3 유틸리티 파일 수정
40.2.4 빌드와 테스트
41장 화면 업데이트 알고리즘을 업그레이드해 속도를 높이자
41.1 화면 업데이트 알고리즘 재설계
41.1.1 Z 순서의 가장 위에서 아래로 그리는 알고리즘의 문제점
41.1.2 새로운 화면 업데이트 알고리즘 설계
41.1.3 비트맵을 이용한 업데이트 영역 관리
41.2 GUI 시스템 업그레이드
41.2.1 윈도우 리스트의 Z 순서와 관련된 함수 수정
41.2.2 화면 업데이트 비트맵 관련 함수 구현
41.2.3 업데이트 완료 확인 함수 구현
41.2.4 화면 업데이트 관련 함수 수정
41.2.5 윈도우 매니저 태스크 업그레이드
41.3 새로운 화면 업데이트 알고리즘의 통합과 빌드
41.3.1 윈도우 파일 수정
41.3.2 윈도우 매니저 태스크 파일 수정
41.3.3 빌드와 테스트
42장 GUI 태스크 (2) - 애플리케이션 패널 태스크
42.1 애플리케이션 패널 설계와 윈도우 구현
42.1.1 애플리케이션 패널을 위한 자료구조 설계
42.1.2 애플리케이션 패널 윈도우 구현
42.1.3 애플리케이션 패널 윈도우의 이벤트 처리 함수 구현
42.1.4 애플리케이션 패널 태스크 구현
42.2 애플리케이션 리스트 윈도우 설계와 구현
42.2.1 애플리케이션 리스트 윈도우를 위한 자료구조 설계
42.2.2 애플리케이션 리스트 윈도우 구현
42.2.3 애플리케이션 리스트 윈도우의 이벤트 처리 함수 구현
42.2.4 애플리케이션 패널 태스크와 윈도우 매니저 태스크 수정
42.3 애플리케이션 패널 통합과 빌드
42.3.1 애플리케이션 패널 태스크 파일 추가
42.3.2 윈도우 매니저 태스크 파일 수정
42.3.3 빌드와 테스트
43장 GUI 태스크 (3) - 시스템 모니터 태스크
43.1 프로세서 정보 영역 설계와 구현
43.1.1 프로세서 정보 영역 설계와 프로세서 정보 표시 함수 구현
43.1.2 시스템 모니터 태스크 설계와 구현
43.2 메모리 정보 영역 설계와 구현
43.2.1 메모리 정보 영역 설계와 메모리 정보 표시 함수 구현
43.2.2 시스템 모니터 태스크에 메모리 정보 표시 기능 추가
43.3 시스템 모니터 통합과 빌드
43.3.1 GUI 태스크 파일 수정
43.3.2 애플리케이션 패널 태스크 파일 수정
43.3.3 빌드와 테스트
44장 GUI 태스크 (4) - GUI 콘솔 셸 태스크
44.1 콘솔 출력 함수 재설계와 업그레이드
44.1.1 콘솔 출력 처리 방안 설계
44.1.2 콘솔 초기화 함수와 콘솔 출력 함수 업그레이드
44.1.3 GUI 콘솔 셸 태스크와 GUI 콘솔 윈도우 구현
44.2 콘솔 입력 함수 재설계와 업그레이드
44.2.1 콘솔 입력 처리 방안과 콘솔 커맨드 처리 방안 설계
44.2.2 업그레이드된 콘솔 초기화 함수 수정
44.2.3 콘솔 입력 함수 업그레이드
44.2.4 GUI 콘솔 셸 태스크 수정과 셸 태스크 수정
44.3 GUI 콘솔 셸 통합과 빌드
44.3.1 GUI 태스크 파일 수정
44.3.2 콘솔 파일 수정
44.3.3 콘솔 셸 파일 수정
44.3.4 애플리케이션 패널 태스크 파일 수정
44.3.5 빌드와 테스트
45장 GUI 태스크 (5) - 이미지 뷰어 태스크
45.1 JPEG 이미지와 JPEG 디코더 모듈
45.1.1 JPEG과 JPEG 이미지 변환 과정
45.1.2 JPEG 디코더 모듈 소개
45.2 이미지 뷰어 태스크 구현
45.2.1 파일 이름 입력 윈도우와 이미지 뷰어 태스크 구현
45.2.2 이미지 출력 윈도우 구현
45.2.3 배경 화면 윈도우에 배경 이미지를 출력
45.3 이미지 뷰어 통합과 빌드
45.3.1 JPEG 디코더 모듈 파일 추가
45.3.2 GUI 태스크 파일 수정
45.3.3 애플리케이션 패널 태스크 파일 수정
45.3.4 윈도우 파일 수정
45.3.5 배경 이미지 파일 추가
45.3.6 빌드와 테스트
46장 윈도우 크기 변경 기능을 추가하자
46.1 GUI 시스템 업그레이드
46.1.1 윈도우 크기 변경 함수 설계와 구현
46.1.2 윈도우 제목 표시줄에 윈도우 크기 변경 버튼 추가
46.1.3 윈도우 매니저 태스크에 크기 변경 표식 처리 기능 추가
46.1.4 윈도우 자료구조에 윈도우 크기 변경 기능 추가
46.2 이미지 뷰어 태스크 업그레이드
46.2.1 이미지 뷰어 태스크에 윈도우 크기 변경 기능 추가
46.3 윈도우 크기 변경 기능 통합과 빌드
46.3.1 윈도우 파일 수정
46.3.2 윈도우 매니저 태스크 파일 수정
46.3.3 GUI 태스크 파일 수정
46.3.4 빌드와 테스트
8부 유저 레벨 응용프로그램과 OS 확장
47장 커널 영역과 유저 영역을 분리해 유저 레벨 응용프로그램에 대비하자
47.1 커널 레벨과 유저 레벨 분리
47.1.1 커널 레벨과 유저 레벨 분리를 위한 메모리 레이아웃 정리
47.1.2 유저 영역을 위한 유저 레벨 세그먼트 디스크립터 생성
47.1.3 세그먼테이션 기법과 메모리 영역 보호
47.1.4 커널 영역 보호를 위한 페이지 엔트리의 속성 변경
47.2 유저 레벨 태스크 생성과 예외 처리
47.2.1 유저 레벨 태스크 생성 기능 추가
47.2.2 태스크 예외 처리 정책 수정
47.3 커널 영역과 유저 영역 분리 코드의 통합과 빌드
47.3.1 페이지 파일 수정
47.3.2 디스크립터 파일 수정
47.3.3 동적 메모리 관리 파일과 인터럽트 핸들러 파일 수정
47.3.4 태스크 파일 수정
47.3.5 빌드와 테스트
48장 시스템 콜과 유저 레벨 라이브러리를 구현하자
48.1 시스템 콜과 기반 함수 구현
48.1.1 시스템 콜 구현을 위한 최선의 선택, SYSCALL과 SYSRET
48.1.2 시스템 콜 기반 설계와 기반 함수 구현
48.2 유저 레벨 라이브러리와 태스크 생성
48.2.1 유저 레벨 시스템 콜 함수와 커널 기능 호출 함수 구현
48.2.2 유저 레벨 라이브러리 구현
48.2.3 시스템 콜 테스트용 유저 레벨 태스크 구현과 유휴 태스크 코드 수정
48.3 시스템 콜 코드 통합과 빌드
48.3.1 시스템 콜 리스트 파일 추가
48.3.2 시스템 콜 파일과 시스템 콜 엔트리 포인트 파일 추가
48.3.3 모드 전환 파일 수정
48.3.4 어셈블리어 유틸리티 파일 수정
48.3.5 태스크 파일과 C 언어 커널 엔트리 포인트 파일 수정
48.3.6 콘솔 셸 파일 수정
48.3.7 시스템 콜 파일, 시스템 콜 라이브러리 파일, 시스템 콜 리스트 파일 추가
48.3.8 타입 정의 파일과 유저 라이브러리 파일 추가
48.3.9 빌드와 테스트
49장 유저 레벨 응용프로그램 (1) - Hello World
49.1 응용프로그램 개발을 위한 라이브러리 파일 생성
49.1.1 라이브러리 파일의 종류와 역할
49.1.2 AR 프로그램의 기능과 MINT64 OS 라이브러리 생성
49.2 Hello World GUI 태스크를 응용프로그램으로 변환
49.2.1 응용프로그램 엔트리 포인트 구현
49.2.2 응용프로그램 메인 함수 구현과 Hello World GUI 태스크 변환
49.2.3 응용프로그램 빌드를 위한 컴파일러, 링커, objcopy 프로그램 옵션 조정
49.3 응용프로그램 빌드 환경 통합과 테스트
49.3.1 시스템 콜 파일 수정과 응용프로그램 라이브러리 헤더 파일 파일 추가
49.3.2 라이브러리 파일 빌드용 makefile 추가
49.3.3 Hello World 응용프로그램 파일 추가
49.3.4 Hello World 응용프로그램 빌드용 makefile과 링크 스크립트 파일 추가
49.3.5 최상위 makefile 수정과 애플리케이션 디렉터리에 makefile 추가
49.3.6 응용프로그램 빌드 테스트
50장 유저 레벨 응용프로그램을 실행하자
50.1 ELF 파일 포맷의 이해
50.1.1 ELF64 파일의 구조와 ELF 헤더 자료구조
50.1.2 섹션 헤더 테이블과 섹션 헤더 자료구조
50.1.3 심볼 테이블 섹션과 재배치 섹션
50.2 재배치 정보 분석과 응용프로그램 로더 구현
50.2.1 간단한 응용프로그램을 통한 재배치 정보 분석
50.2.2 응용프로그램 로딩에서 실행까지
50.2.3 응용프로그램 로더 구현
50.2.4 응용프로그램을 생성하는 시스템 콜 추가
50.3 응용프로그램 로더 통합과 빌드
50.3.1 응용프로그램 로더 파일 추가
50.3.2 시스템 콜 파일과 시스템 콜 리스트 파일 수정
50.3.3 유저 레벨 시스템 콜 라이브러리 파일 수정
50.3.4 콘솔 셸 파일 수정
50.3.5 빌드와 테스트
51장 유저 레벨 응용프로그램 (2) - 텍스트 뷰어
51.1 텍스트 뷰어의 알고리즘과 자료구조 설계
51.1.1 텍스트 뷰어 알고리즘 설계
51.1.2 텍스트 뷰어 자료구조 설계
51.2 텍스트 뷰어 구현
51.2.1 파일 읽기 함수 구현
51.2.2 라인별 파일 오프셋 계산 함수 구현
51.2.3 화면 출력 함수 구현
51.2.4 메인 함수 구현
51.3 텍스트 뷰어 통합과 빌드
51.3.1 메인 파일 추가
51.3.2 응용프로그램 빌드용 makefile과 링크 스크립트 파일 추가
51.3.3 상위 디렉터리의 makefile 수정
51.3.4 빌드와 테스트
52장 유저 레벨 응용프로그램 (3) - 버블 슈터
52.1 버블 슈터의 알고리즘과 자료구조 설계
52.1.1 버블 슈터 알고리즘 설계
52.1.2 버블 슈터 자료구조 설계
52.2 버블 슈터 구현
52.2.1 게임 정보 초기화 함수와 물방울 생성 함수 구현
52.2.2 물방울 이동 함수와 물방울 삭제 함수 구현
52.2.3 게임 정보 출력 함수와 게임 영역 출력 함수 구현
52.2.4 메인 함수 구현
52.3 버블 슈터 통합과 빌드
52.3.1 메인 파일 추가
52.3.2 응용프로그램 빌드용 makefile과 링크 스크립트 파일 추가
52.3.3 상위 디렉터리의 makefile 수정
52.3.4 빌드와 테스트
53장 유저 레벨 응용프로그램 (4) - 헥사 게임
53.1 헥사 게임의 알고리즘과 자료구조 설계
53.1.1 헥사 게임 알고리즘 설계
53.1.2 헥사 게임 자료구조 설계
53.2 헥사 게임 구현
53.2.1 게임 정보 초기화 함수와 블록 생성 함수 구현
53.2.2 이동 가능 확인 함수와 블록 고정 함수 구현
53.2.3 연속된 블록을 표시하는 함수와 표시된 블록을 제거하는 함수 구현
53.2.4 블록 압축 함수와 연속된 블록 제거 함수 구현
53.2.5 게임 정보 출력 함수와 게임 영역 출력 함수 구현
53.2.6 메인 함수 구현
53.3 헥사 게임 통합과 빌드
53.3.1 메인 파일 추가
53.3.2 응용프로그램 빌드용 makefile과 링크 스크립트 파일 추가
53.3.3 상위 디렉터리의 makefile 수정
53.3.4 빌드와 테스트
54장 OS 확장 기능 (1) - 한글 출력 기능과 한글 뷰어
54.1 한글 코드와 한글 폰트
54.1.1 한글 코드의 종류와 특징
54.1.2 한글 완성형 코드의 구조
54.2 한글 폰트와 한글 출력
54.2.1 한글 폰트의 구조와 한글 폰트 추출 방법
54.2.2 한글 출력
54.3 한글 뷰어 구현
54.3.1 라인별 파일 오프셋 계산 함수 수정
54.3.2 화면 출력 함수 수정
54.4 한글 출력 기능과 한글 뷰어의 통합과 빌드
54.4.1 2D 그래픽 라이브러리 파일 수정
54.4.2 한글 폰트 파일 추가
54.4.3 메인 파일 추가
54.4.4 응용프로그램 빌드용 makefile과 링크 스크립트 파일 추가
54.4.5 상위 디렉터리의 makefile 수정
54.4.6 빌드와 테스트
55장 OS 확장 기능 (2) - 한글 입력 모듈과 한 줄 메모장
55.1 한글 입력 테이블과 한글 조합 알고리즘 설계
55.1.1 한글 입력 테이블과 자료구조 설계
55.1.2 한글 입력 알고리즘 설계
55.2 한글 조합 코드 구현
55.2.1 한글 조합 함수 구현
55.2.2 한글 자/모음 판단 함수와 한글 입력 테이블에서 가장 많이 일치하는 항목 검색 함수
55.3 한글 입력 모듈을 활용한 한 줄 메모장 구현
55.3.1 한 줄 메모장 소개와 자료구조 설계
55.3.2 한 줄 메모장 구현
55.4 한글 입력 모듈과 한 줄 메모장의 통합과 빌드
55.4.1 한글 입력 파일 추가
55.4.2 메인 파일 추가
55.4.3 응용프로그램 빌드용 makefile과 링크 스크립트 파일 추가
55.4.4 상위 디렉터리의 makefile 수정
55.4.5 빌드와 테스트
56장 OS 확장 기능 (3) - 데이터 이동을 위한 패키지 파일
56.1 디스크 이미지 파일과 패키지 파일
56.1.1 다시 보는 디스크 이미지 파일
56.1.2 패키지 파일의 구조와 패키지 헤더 설계
56.1.3 패키지 메이커 프로그램 구현
56.2 MINT64 OS에 패키지 파일 처리 기능 추가
56.2.1 부트 로더의 메모리 로딩 부분 수정
56.2.2 콘솔 셸에 패키지 설치 커맨드 추가
56.3 패키지 메이커와 패키지 파일의 통합과 빌드
56.3.1 패키지 메이커 프로그램 추가
56.3.2 부트 로더 파일 수정
56.3.3 콘솔 셸 파일 수정
56.3.4 최상위 makefile 수정
56.3.5 빌드와 테스트
57장 OS 확장 기능 (4) - USB 플래시 드라이브를 이용한 부팅
57.1 USB 플래시 드라이브와 BIOS
57.1.1 플로피 디스크와 USB 플래시 드라이브의 공통점
57.1.2 BIOS는 우리가 어느 드라이브로 부팅했는지 알고 있다
57.1.3 부트 로더에 USB 플래시 드라이브 지원 기능 추가
57.2 USB 플래시 드라이브 부팅 기능의 통합과 빌드
57.2.1 부트 로더 파일 수정
57.2.2 빌드와 테스트
58장 기나긴 여정의 끝, 그리고 새로운 시작
58.1 왔던 길을 되돌아 보며
58.2 MINT64 OS의 개선할 점
58.3 만남과 헤어짐과 새로운 시작