본문 바로가기

Programming

윈도우 시스템 프로그래밍_4

[뇌를 자극하는 윈도우즈 시스템 프로그래밍] 2007 윤성우 저
" 시스템 프로그래이란 하드웨어를 사용할 수 있도록 도와주는 프로그램"

= Window 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램 구현하는 것

 

9 스케줄링 알고리즘과 우선순위

멀티프로세서에서 여러 가지 프로세스를 운영하려면 스케줄러(실행 중인 모든 프로세스들에게 골고루 CPU 할당)가 필요하다.

 

(soft) RTOS vs OS

RTOS는 응답성이 OS보다 좋다. 

일반 OS는 범용적인 사용을 위해 디자인되어 있다. 

(soft) RTOS는 사용하는 영역이 제한적이다. 프로그래머가 시키지 않은 일은 하지 않는다. 따라서 사용 목적이 구체적이고 제한적이다 보니 단순하게 디자인되어 있고 일반 OS에 비해 가볍다.

 

비선점형 OS

실행중인 프로세스보다 높은 우선순위의 프로세스가 등장한다고 해서 바로 실행 대상을 변경하지 않는다. 현재 실행 중인 프로세스가 명시적으로 CPU를 양보할 때까지 기다린다. 때문에 프로그래머는 자신이 개발한 프로그램이 계속 CPU를 독점하지 않도록 신경 써야 한다.

 

선점형 OS

현재 실행 중인 프로세스보다 높은 우선순위의 프로세스가 등장하면 순서 조정이 이루어진다. (스케줄러가 하는 일이 많다.)

 

 

우선순위 스케줄링 알고리즘

* 라운드 로빈 스케줄링 알고리즘

정해진 시간 간격만큼만 실행을 하고 우선순위가 동일한 다른 프로세스에게 CPU 할당을 넘긴다.

* 스케줄링 진행되는 시점

1. 매 타임 슬라이스마다

2. 새로운 프로세스 생성될 때마다

3. 블로킹 상태에 놓일 때마다

 

 

**Sleep 함수는 프로세스의 실행을 멈추는 함수가 아니라 스레드의 실행을 멈추는 함수이다.

 

 

Redirecttion 기능 : 방향 재지정. 

ex) 화면에 출력해야 하는 것을 파일에 저장

ex) 입력을 키보드가 아닌 파일에 있는 값으로 받음

 

 


10 컴퓨터 구조에 대한 세 번째 이야기

sp레지스터

지역변수는 스택에 FIFO 방식으로 쌓이게 된다. 계속 스택에 데이터를 쌓고 반환하기 위해서는 어디까지 데이터를 저장했는지 기억해야 한다. 이를 위해 CPU 내에 sp(stack pointer)라는 레지스터가 존재한다.

ex) 4바이트 할당 : 4바이트만큼 움직임, 8바이트 할당 : 8 바이트만큼 움직임

하지만 메모리를 반환할 때에는?

 

(fp) 프레임 포인터 레지스터

되돌아갈 sp 위치 저장

중첩된 함수의 경우? 함수를 호출할 때마다 fp레지스터에 저장된 값을 스택에 쌓는다.

ex)

f2 쌓음

f2()

f1 쌓음

f1()

main 쌓음

main()

 

레지스터

ir, sp, lr, pc (함수 호출 완료 시 되돌아갈 주소 값)

 

스택에 값을 저장했을 경우 어셈블리

PUSH fp // 스택의 주소
ADD fp, sp, -4 //  sp의 값을 fp에 저장 (sp가 가리키던 위치를 기억)
PUSH 8 // 8 값을 메모리 할당

 

호출 규약

__stdcall : 호출한 함수 내에서 스택 프레임 반환

__cdecl : c/c++의 디폴트 호출 규약

__fastcall : 함수 호출을 빠르게 처리하기 위한 호출 규약