[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 2007 윤성우 저
" 시스템 프로그래이란 하드웨어를 사용할 수 있도록 도와주는 프로그램"
= Window 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램 구현하는 것
3장 WIN32 와 WIN64
한 번에 전송 및 수신할 수 있는 데이터 크기에 따라 32비트 시스템과 64비트 시스템이 나뉘게 된다.
WIN 64 의 경우 :
표현할 수 있는 주소 범위가 64비트
(주소 값의 이동 및 연산이 한 번에 처리 가능)
WIN32의 경우 :
표현할 수 있는 주소 범위가 32비트
(더 많은 주소 값의 이동 및 연산이 한 번에 처리 가능)
64비트와 32비트의 공존의 문제점
int arr[10];
int address = arr;
주소 값으로 4G 이상의 주소 값이 할당될 경우 32비트 시스템에서는 int로 형 변환하면 메모리 손실이 일어날 수 있다. (전달, 처리할 수 있는 값이 4G 이하이기 때문)
#오류의 확인
DWORD GetLastError()
Window 시스템의 함수가 호출될 때마다 함수가 반환하는 에러코드는 갱신된다.
=> 그러므로 오류 확인은 오류 발생한 직후에 바로 하는 것이 좋다.
4장 컴퓨터 구조에 대한 두 번째 이야기
레지스터
CPU 명령은 레지스터에 담아 명령한다.
16비트 명령어로 만들 수 있는 명령어의 총개수는 2의 16승 개.
r1+r2 =7
이라는 명령어를 만들 때 r1을 정의하는 명령어, r2를 정의하는 명령어, 결과물을 담을 공간이 필요하다.
# 메인 메모리에 저장된 값이 필요한 경우.
메인 메모리->레지스터 : LOAD, 레지스터 -> 메인 메모리 : STORE 명령어가 필요하다.
# Direct모드와 Indirect 모드
Direct
하나의 명령어에 여러 정보를 담다 보니 데이터 크기에 제한이 따른다는 문제점이 등장하였다.
16비트에 4비트만 r1을 표현하는 데 사용된다면 16까지만 사용할 수 있다.
이렇게 할당한 비트 수 안에서 표현 가능한 범위의 메모리 영역만 접근하는 것을 Direct모드라고 한다.
Indirect
Indirect 모드의 경우 값이 들어있는 번지만을 가리키기 된다. 정해진 비트에 주소 값만 담기 때문에 더 많은 값을 담을 수 있다.
5장 프로세스의 생성과 소멸
프로세스란
실행파일을 더블클릭하고->프로그램의 실행을 위해 메모리 할당이 이루어지고 -> 이 메모리 공간으로 바이너리 코드가 올라간다.
=> 이 순간부터 프로그램은 프로세스라고 불리게 된다. (= 현재 실행 중인 프로그램)
프로세스를 구성하는 요소
데이터 영역, 스택 영역, 힙 영역, Code 영역(실행파일을 구성하는 명령어들이 올라가는 영역)
프로세스 스케쥴링
CPU는 하나인데 실행되야할 프로세스가 여러 개라면? CPU가 여러 프로세스를 고속으로 번갈아 실행시키는 방법이 있다.
스케줄링의 기본 원리
그렇다면 누가 언제 무슨 순서대로 실행을 해줘야 하는가를 결정짓는 일을 스케줄링이라고 한다.
기본적으로 CPU는 I/O를 하는데 많은 시간을 할당한다. 그렇다면 I/O를 기다리고 있는 시점에서 CPU를 쉬게 되는데 이 타이밍에 다른 연산을 맡길 수 있다.
크게 스케줄링에는 Start, Ready, Runing, Block, End 상태에 있는데 I/O상태라면 해당 프로세스를 Block 시키고 Ready중인 다른 프로세스를 실행 시킨다.
*
Run->Ready : 우선순위에 밀려 어쩔 수 없이 양보한 경우
Run->Block : 스케줄러 관심 밖으로 나간 경우, I/O 같은 작업이 끝난 후 Ready에 들어가야 다음 수행 대상이 될 수 있다.
컨텍스트 스위칭
: 실행 중인 프로세스를 변경하는 것
레지스터의 경우 A가 실행될 때에는 A 관련 연산으로 가득 차 있고 B가 실행될 때에는 B 관련 연산으로 채워야 한다. A 기록은 다시 복원될 때를 대비하여 어딘가에 기록되어야 한다.
따라서 "실행되는 프로세스의 변경과정에서 발생하는 컨텍스트 스위칭은 시스템에 많은 부담을 준다."
'Programming' 카테고리의 다른 글
윈도우 시스템 프로그래밍_4 (0) | 2020.09.26 |
---|---|
윈도우 시스템 프로그래밍_3 (0) | 2020.09.21 |
윈도우즈 시스템 프로그래밍 (0) | 2020.09.06 |
[도서] Code Complete - #2 (0) | 2020.05.18 |
[도서] Code Complete - #1 (0) | 2020.05.06 |