목차 및 책 구성
스터디/Windows 구조와 원리 OS를 관통하는 프로그래밍의 원리
2014. 7. 15. 19:26
이 커테고리에 올릴 내용은
Windows 구조와 원리 OS를 관통하는 프로그래밍의 원리
입니다.
os에 대한 구조와 원리를 설명할것입니다.
총 16 장 되어있습니다.
게시글마다 1장씩 올릴예정입니다.
목차는
제1장컴퓨터의 구조와 역사
01시스템 프로그래밍과 운영체제
1. 시스템 프로그래밍이란?
2. 운영체제란?
02프로그래머 입장에서 바라본 컴퓨터의 구조와 역사
1. 폰 노이만 구조(Von Neumann Machine)와 ISA(Instruction Set Architecture)
2. 인텔 8008, 8086 마이크로프로세서
3. 8086의 레지스터들
4. 8086 세그먼트 레지스터의 사용
5. 80286과 80386 마이크로프로세서의 출현
6. 80386에서의 레지스터들
7. 컴퓨터 아키텍처(Architecture)와 컴퓨터 오가니제이션(Organization)
8. 80486 마이크로프로세서
9. 펜티엄(Pentium) 프로세서와 슈퍼 스칼라
제2장데이터의 표현과 메모리 구조
012진법, 16진법의 표현법과 비트, 바이트
02정수의 표현
03실수의 표현
04문자의 표현
05바이트 순서(Little Endian과 Big Endian)
06메모리의 구조
07CPU와 메모리간의 연결
1. 8086에서 짝수 번지, 홀수 번지
2. 80386, 80486, 그리고 Pentium에서의 데이터 전송
제3장기계어의 구성
01기계어에 대한 이해와 필요성
02고급 언어, 기계어, 그리고 어셈블리 언어의 예
03명령의 구성과 실행
04기계어의 구성(명령어 형식: Instruction Format)
1. Instruction Prefixes
2. 작동 코드(Opcode: Operand code)
3. 번지 지정 방식과 MODR/M 그리고 SIB
4. 번지 지정 방식
제4장프로시저와 스택 구조
01스택을 사용한 복귀 주소의 저장
02스택을 사용한 로컬 변수의 저장
03스택을 사용한 파라미터 전달
04파라미터 전달의 여러 가지 방법(Calling Conventions)
1. __cdecl
2. __stdcall
3. __fastcall
05스택 프레임을 이용한 스택 백트레이싱
06프로시저에서 리턴 값 전달하기
07Windows에서의 스택 구조
08함수에서의 레지스터 사용
09Name Mangling(name decoration)
제5장프로세스와 스레드
01프로세스와 스레드의 개념
1. 프로세스(Process)
2. 스레드(Thread)
02프로세스의 구조
1. WinDBG를 사용한 프로세스 구조체 살펴보기
2. 프로그램에서 EPROCESS 포인터 얻기
3. 프로세스를 구성하는 요소들
03스레드의 구조
1. WinDBG를 사용한 스레드 구조체 살펴보기
2. 프로그램에서 ETHREAD 포인터 얻기
04구조화된 예외 처리(Structured Exception Handling)
1. 운영체제에서의 예외 처리 과정
2. 아주 간단한 SEH 처리 예
3. Visual C++에서의 SEH 처리 예
4. Visual C++의 SEH에서 제공하는 추가적 기능들
05애플리케이션에서 프로세스와 스레드 관련 정보 얻기
제6장스레드의 스케줄링
01스레드의 상태
02우선순위 알고리즘
1. Windows에서의 우선순위 스케줄링 구현
2. 프로세스 우선순위와 스레드 우선순위
03Performance monitor 프로그램을 이용한 실험
04선점형 스케줄링(Preemptive Scheduling)
1. 선점되어지는 경우
2. Windows에서의 선점형 스케줄링 구현
3. IRQL과 커널레벨 동기화
제7장스레드의 동기화
01스레드 동기화의 필요성
02유저모드에서의 동기화 함수들
1. 크리티컬 섹션(Critical Section)
2. 뮤텍스(Mutex)
3. 세마포어(Semaphore)
4. 이벤트(Event)
03커널 동기화 객체와 그 구조
1. 커널 동기화 객체
2. 디스패처(Dispatcher)와 대기 블록(WaitBlock)
제8장메모리 관리
01가상 주소(Virtual Address)
02가상 주소(Virtual Address)의 구현
1. 페이징 기법
2. 가상 주소와 페이징 시스템
3. 세그먼트 기법
4. 단편화(Fragmentation)
5. 세그먼트와 페이징 기법의 병합
제9장세그먼테이션
01가상 메모리에서 실제 물리 메모리까지
02세그먼트 레지스터와 그 사용
03세그먼테이션(Memory Segmentation)
04세그먼트 디스크립터
05세그먼트 디스크립터의 내용들
1. 베이스(Base) 필드
2. 리미트(Limit) 필드
3. 액세스(Access) 비트
4. 프레젠트(Present) 비트
5. 디폴트(Default) 비트
6. Granularity 비트
7. 시스템(System) 비트와 타입(Type) 비트
06디스크립터 테이블과 세그먼트 셀렉터
1. 디스크립터 테이블
2. LDT(Local Descriptor Table)
3. 세그먼트 셀렉터
07Windows에서의 세그먼트 디스크립터와 레지스터
1. 애플리케이션에서의 세그먼트 레지스터와 그 내용
2. 커널레벨에서의 세그먼트 레지스터와 그 내용
제10장페이징
01페이징(Paging)
02선형 주소에서 물리 주소까지
1. CR3 레지스터
2. 페이지 디렉토리(Page Directory)
3. 페이지 테이블(Page Table)
4. 실습
03Windows에서의 페이지 디렉토리와 테이블
04공유 메모리와 공유 모듈
05메모리 공간의 전환
063GByte의 유저 메모리를 사용하는 Windows
07 Page Address Extensions(PAE)
제11장페이지 관리
01요구 페이지 처리
1. 페이지 폴트 예외 핸들러
2. 선페이징(Prepaging)
3. Paged Memory와 NonPaged Memory
02페이지 교체 정책(Page Replacement Policy)
1. 지역성(Locality)
2. LRU(Least Recently Used) 방식
3. FIFO(First In, First Out) 방식
4. Page Frame Number Database
5. 실습
03작업세트(Working Set) 관리
1. 스레싱(Thrashing) 현상
2. 작업세트 관리
3. 작업세트를 조절하기 위한 Win32 API
04페이지의 효과적 이용 방법
제12장프로세서 내의 캐시 관리
01원리
02캐시 메모리의 주소 매핑 방식
1. 직접 매핑(direct mapping)
2. 어소시에이티브 매핑(associative mapping)
3. 셋 어소시에이티브 매핑(set associative mapping)
03캐시 교체 알고리즘
04캐시 쓰기 정책
1. Write through 정책
2. Write back 정책
05Pentium Processor에서의 캐시 구조
06캐시와 프로그램 최적화
1. 데이터의 위치와 속도
2. 지역성을 이용한 최적화(Locality)
3. 특별한 명령어를 이용한 최적화
4. 데이터의 정렬(Alignment)
제13장윈도우즈에서의 캐시 관리
01Windows에서의 파일 읽기와 그 과정
02내부 구조
1. Windows의 System Cache 영역과 View
2. VACB(Virtual Address Control Blocks)에 의한 View 관리
3. 파일 열기 속성과 캐시 관리자
03캐시 내부 살펴보기
1. FILE I/O 함수에 의한 접근 시의 데이터 관리
2. 메모리 맵드 I/O에 대한 파일 관리
제14장유저레벨과 커널레벨
01특권레벨(Privilege Levels)
02커널모드(Ring 0)와 유저모드(Ring 3)
03Windows에서의 유저레벨 코드 세그먼트
04Windows에서의 커널레벨 코드 세그먼트
05커널레벨에서만 실행되는 CPU 명령어
06세그먼트의 갱신과 특권레벨
1. 데이터의 세그먼트 갱신(DS, ES, FS, GS)
2. 스택 세그먼트 갱신(SS)
07코드 세그먼트의 변경과 특권레벨의 변경
1. 세그먼트간의 JMP 또는 CALL 명령 실행
08인터럽트와 특권레벨
1. IDT(Interrupt Descriptor Table)
2. 인텔에서 정의하고 있는 인터럽트 벡터별 내용
3. 인터럽트 발생과 스택 변화
4. Windows API의 흐름
09I/O 특권레벨 변경
1. TSS(Task State Segment) 변경을 통한 I/O 권한 변경
2. IOPL 변경을 통한 IO 특권레벨 변환하기
15장 실행 파일과 로더
01PE 파일의 레이아웃
1. DOS 헤더와 스터브 코드
2. PE 헤더
3. Optional 헤더
4. 섹션(Section) 헤더
5. 세션(Section)
02PE 파일의 주요 정보와 로더
1. 로더의 내부
2. 기준 재배치(Base Relocations)
3. 익스포트 함수(Export Functions)
4. 임포트 함수(Import Functions)
16장 16비트 에뮬레이션(Emulation)
01MS-DOS 에뮬레이션
1. 메모리 공간의 구성
2. 16비트 명령어의 실행
3. Interrupt에 대한 처리
4. Memory Mapped I/O에 대한 처리
0280286 환경에서 수행되는 Win16 에뮬레이션
부록 A.WinDBG 설치 및 간단한 사용법
부록 B.드라이버 개발 경험이 없는 프로그래머를 위하여
부록 C.디스어셈블링에 대한 이해
부록 D. 디버거의 내부 구조와 원리
01시스템 프로그래밍과 운영체제
1. 시스템 프로그래밍이란?
2. 운영체제란?
02프로그래머 입장에서 바라본 컴퓨터의 구조와 역사
1. 폰 노이만 구조(Von Neumann Machine)와 ISA(Instruction Set Architecture)
2. 인텔 8008, 8086 마이크로프로세서
3. 8086의 레지스터들
4. 8086 세그먼트 레지스터의 사용
5. 80286과 80386 마이크로프로세서의 출현
6. 80386에서의 레지스터들
7. 컴퓨터 아키텍처(Architecture)와 컴퓨터 오가니제이션(Organization)
8. 80486 마이크로프로세서
9. 펜티엄(Pentium) 프로세서와 슈퍼 스칼라
제2장데이터의 표현과 메모리 구조
012진법, 16진법의 표현법과 비트, 바이트
02정수의 표현
03실수의 표현
04문자의 표현
05바이트 순서(Little Endian과 Big Endian)
06메모리의 구조
07CPU와 메모리간의 연결
1. 8086에서 짝수 번지, 홀수 번지
2. 80386, 80486, 그리고 Pentium에서의 데이터 전송
제3장기계어의 구성
01기계어에 대한 이해와 필요성
02고급 언어, 기계어, 그리고 어셈블리 언어의 예
03명령의 구성과 실행
04기계어의 구성(명령어 형식: Instruction Format)
1. Instruction Prefixes
2. 작동 코드(Opcode: Operand code)
3. 번지 지정 방식과 MODR/M 그리고 SIB
4. 번지 지정 방식
제4장프로시저와 스택 구조
01스택을 사용한 복귀 주소의 저장
02스택을 사용한 로컬 변수의 저장
03스택을 사용한 파라미터 전달
04파라미터 전달의 여러 가지 방법(Calling Conventions)
1. __cdecl
2. __stdcall
3. __fastcall
05스택 프레임을 이용한 스택 백트레이싱
06프로시저에서 리턴 값 전달하기
07Windows에서의 스택 구조
08함수에서의 레지스터 사용
09Name Mangling(name decoration)
제5장프로세스와 스레드
01프로세스와 스레드의 개념
1. 프로세스(Process)
2. 스레드(Thread)
02프로세스의 구조
1. WinDBG를 사용한 프로세스 구조체 살펴보기
2. 프로그램에서 EPROCESS 포인터 얻기
3. 프로세스를 구성하는 요소들
03스레드의 구조
1. WinDBG를 사용한 스레드 구조체 살펴보기
2. 프로그램에서 ETHREAD 포인터 얻기
04구조화된 예외 처리(Structured Exception Handling)
1. 운영체제에서의 예외 처리 과정
2. 아주 간단한 SEH 처리 예
3. Visual C++에서의 SEH 처리 예
4. Visual C++의 SEH에서 제공하는 추가적 기능들
05애플리케이션에서 프로세스와 스레드 관련 정보 얻기
제6장스레드의 스케줄링
01스레드의 상태
02우선순위 알고리즘
1. Windows에서의 우선순위 스케줄링 구현
2. 프로세스 우선순위와 스레드 우선순위
03Performance monitor 프로그램을 이용한 실험
04선점형 스케줄링(Preemptive Scheduling)
1. 선점되어지는 경우
2. Windows에서의 선점형 스케줄링 구현
3. IRQL과 커널레벨 동기화
제7장스레드의 동기화
01스레드 동기화의 필요성
02유저모드에서의 동기화 함수들
1. 크리티컬 섹션(Critical Section)
2. 뮤텍스(Mutex)
3. 세마포어(Semaphore)
4. 이벤트(Event)
03커널 동기화 객체와 그 구조
1. 커널 동기화 객체
2. 디스패처(Dispatcher)와 대기 블록(WaitBlock)
제8장메모리 관리
01가상 주소(Virtual Address)
02가상 주소(Virtual Address)의 구현
1. 페이징 기법
2. 가상 주소와 페이징 시스템
3. 세그먼트 기법
4. 단편화(Fragmentation)
5. 세그먼트와 페이징 기법의 병합
제9장세그먼테이션
01가상 메모리에서 실제 물리 메모리까지
02세그먼트 레지스터와 그 사용
03세그먼테이션(Memory Segmentation)
04세그먼트 디스크립터
05세그먼트 디스크립터의 내용들
1. 베이스(Base) 필드
2. 리미트(Limit) 필드
3. 액세스(Access) 비트
4. 프레젠트(Present) 비트
5. 디폴트(Default) 비트
6. Granularity 비트
7. 시스템(System) 비트와 타입(Type) 비트
06디스크립터 테이블과 세그먼트 셀렉터
1. 디스크립터 테이블
2. LDT(Local Descriptor Table)
3. 세그먼트 셀렉터
07Windows에서의 세그먼트 디스크립터와 레지스터
1. 애플리케이션에서의 세그먼트 레지스터와 그 내용
2. 커널레벨에서의 세그먼트 레지스터와 그 내용
제10장페이징
01페이징(Paging)
02선형 주소에서 물리 주소까지
1. CR3 레지스터
2. 페이지 디렉토리(Page Directory)
3. 페이지 테이블(Page Table)
4. 실습
03Windows에서의 페이지 디렉토리와 테이블
04공유 메모리와 공유 모듈
05메모리 공간의 전환
063GByte의 유저 메모리를 사용하는 Windows
07 Page Address Extensions(PAE)
제11장페이지 관리
01요구 페이지 처리
1. 페이지 폴트 예외 핸들러
2. 선페이징(Prepaging)
3. Paged Memory와 NonPaged Memory
02페이지 교체 정책(Page Replacement Policy)
1. 지역성(Locality)
2. LRU(Least Recently Used) 방식
3. FIFO(First In, First Out) 방식
4. Page Frame Number Database
5. 실습
03작업세트(Working Set) 관리
1. 스레싱(Thrashing) 현상
2. 작업세트 관리
3. 작업세트를 조절하기 위한 Win32 API
04페이지의 효과적 이용 방법
제12장프로세서 내의 캐시 관리
01원리
02캐시 메모리의 주소 매핑 방식
1. 직접 매핑(direct mapping)
2. 어소시에이티브 매핑(associative mapping)
3. 셋 어소시에이티브 매핑(set associative mapping)
03캐시 교체 알고리즘
04캐시 쓰기 정책
1. Write through 정책
2. Write back 정책
05Pentium Processor에서의 캐시 구조
06캐시와 프로그램 최적화
1. 데이터의 위치와 속도
2. 지역성을 이용한 최적화(Locality)
3. 특별한 명령어를 이용한 최적화
4. 데이터의 정렬(Alignment)
제13장윈도우즈에서의 캐시 관리
01Windows에서의 파일 읽기와 그 과정
02내부 구조
1. Windows의 System Cache 영역과 View
2. VACB(Virtual Address Control Blocks)에 의한 View 관리
3. 파일 열기 속성과 캐시 관리자
03캐시 내부 살펴보기
1. FILE I/O 함수에 의한 접근 시의 데이터 관리
2. 메모리 맵드 I/O에 대한 파일 관리
제14장유저레벨과 커널레벨
01특권레벨(Privilege Levels)
02커널모드(Ring 0)와 유저모드(Ring 3)
03Windows에서의 유저레벨 코드 세그먼트
04Windows에서의 커널레벨 코드 세그먼트
05커널레벨에서만 실행되는 CPU 명령어
06세그먼트의 갱신과 특권레벨
1. 데이터의 세그먼트 갱신(DS, ES, FS, GS)
2. 스택 세그먼트 갱신(SS)
07코드 세그먼트의 변경과 특권레벨의 변경
1. 세그먼트간의 JMP 또는 CALL 명령 실행
08인터럽트와 특권레벨
1. IDT(Interrupt Descriptor Table)
2. 인텔에서 정의하고 있는 인터럽트 벡터별 내용
3. 인터럽트 발생과 스택 변화
4. Windows API의 흐름
09I/O 특권레벨 변경
1. TSS(Task State Segment) 변경을 통한 I/O 권한 변경
2. IOPL 변경을 통한 IO 특권레벨 변환하기
15장 실행 파일과 로더
01PE 파일의 레이아웃
1. DOS 헤더와 스터브 코드
2. PE 헤더
3. Optional 헤더
4. 섹션(Section) 헤더
5. 세션(Section)
02PE 파일의 주요 정보와 로더
1. 로더의 내부
2. 기준 재배치(Base Relocations)
3. 익스포트 함수(Export Functions)
4. 임포트 함수(Import Functions)
16장 16비트 에뮬레이션(Emulation)
01MS-DOS 에뮬레이션
1. 메모리 공간의 구성
2. 16비트 명령어의 실행
3. Interrupt에 대한 처리
4. Memory Mapped I/O에 대한 처리
0280286 환경에서 수행되는 Win16 에뮬레이션
부록 A.WinDBG 설치 및 간단한 사용법
부록 B.드라이버 개발 경험이 없는 프로그래머를 위하여
부록 C.디스어셈블링에 대한 이해
부록 D. 디버거의 내부 구조와 원리
'스터디 > Windows 구조와 원리 OS를 관통하는 프로그래밍의 원리' 카테고리의 다른 글
실행 압축) 실행압축과 일반압축 (비 손실압축과 손실 압축) (0) | 2014.09.06 |
---|---|
기계어의 구성 (0) | 2014.07.15 |
데이터의 표현과 메모리 구조 (0) | 2014.07.15 |
컴퓨터의 구조와 역사 (0) | 2014.07.15 |
스터디 카테고리에 관한 설명 (0) | 2014.07.15 |