Bottom half

from Computer/OS 2007/05/09 10:47
Bottom half란 interrupt의  결과로  불려지는  커널내의 함수(routine)들의 집합이다.  프로세
스의  상태에  의존하지  않으며, sleep()과  같은  함수를  불러서  진행을  블록킹(blocking) 
할수  없다.  참고로  top  half란  시스템  콜이나  트랩(trap) 의  결과로  생기며,  동기적
(synchronous)으로  호출되는  커널내의  함수(routine)들  이다.  프로세스와  상태에  의존적이
며, sleep()함수를 부름으로써 블록킹 할 수 있다.
 
인터럽트의  발생시  이를  처리하는  모든  함수들이  불려질  필요는  없다.  즉,  바쁘고  중요한
일을 처리한 다음 나중에 덜 바쁜 일을 처리해 주도록 만들어줄 수 있다. 이와 같은 대표적
인 경우로 네트워크(network)에서 발생하는  패킷(packet)의 처리를  나중으로 미루어  둘 수
도 있을 것이다. 되도록 이면 많은 패킷을 놓치지 않고 빨리 받아서 큐에 넣어둔 다음 네트
워크  인터페이스  인터럽트를 처리했다고 알리고,  나중에 이 패킷들에 대한 처리를 다시 조
금 한가한 시간에 해주게 된다. 이럴 때 사용할 수 있는 것이 바로 bottom half이다. 따라서,
상대적으로 처리시간이 긴 것들은 이것을 이용해서 나중에 시스템에서 처리해 준다.  
 
커널  버전(version) 2.4에서는bottom half에 대한 처리가  많이 변경되었다. 즉, 소프트웨어
IRQ의 일환으로 처리된다. Bottom half의 초기화는  ~/kernel/softirq.c의 softirq_init()에서
bh_base 배열(array)에 init_bh()함수가 bottom half 핸들러 함수를 등록시켜주는 곳에서 일
어나며, bh_acton()함수에서 bottom half에 대한 처리를 해준다. 제거는  remove_bh() 함수
가  처리한다.  모든  시스템  콜이  복귀하기  전에 softirq와  mask를  가지고 softirq가  활성
(active)인지를  확인하게  되며,  만약  그럴  경우에는 do_softirq()  함수를  불러서 softirq를
처리한다.

2007/05/09 10:47 2007/05/09 10:47




1. 할당 영역 : 스택, 힙 , 데이터


2. 할당 시기 : 프로그램 실행시마다..


3. 할당 구조 :

* Data Area : 프로그램 시작 ~ 종료

* Stack Area : 함수 호출 완료시 사라짐

* Heap Area : 프로그래머 관리 영역


4. 프로그램 실행 및 메모리 흐름
void fct1(int);
void fct2(int);
/* Data Area */
int a = 10;
int b = 20;
/* main() 호출 : stack 할당 */
int main(void)
{
  int m = 123; // stack
    /* fct1() 호출: Stack 영역 할당 */
  fct1(m);   // stack : c = 123, d = 30
  /* fct1() 할당 해제 */
 
  /* fct2() 호출: Stack 영역 할당 */
  fct2(m);   // stack : e = 123, f = 40
  /* fct2() 할당 해제 */
  return 0;
}
/* main() 할당 해제 */
void fct1(int c)
{
  int d = 30;
}
void fct2(int e)
{
  int f = 40;
}

◆ 텍스트 : 프로그램의 실행 코드인 기계어 코드와 읽기 전용 데이터 등을 가진다(CPU가 읽어들여 수행한다고 해서 텍스트라고 부르며, 코드 영역이라고도 한다).

◆ 데이터 : C언어에서 전역 변수, 정적 변수 등으로 선언된 변수 영역(읽기/쓰기 가능)

◆ 힙 : 프로그램 수행 중 malloc(), free() 등의 시스템 콜로 할당되고, 해지되는 메모리 영역

◆ 스택 : C언어의 함수 호출시 지역 변수와 인수, 함수의 수행이 끝났을 때 리턴할 주소(return address)를 푸시한다(함수가 끝나면 이 값을 팝하고 리턴하게 된다).

(출처 : '프로세스 메모리 구조와 멀티쓰레드' - 네이버 지식iN)






데이터(data영역)

전역변수와 static변수가 할당되는 곳이다.

프로그램의 시작과 동시에 할당되고 종료되어야만 메모리에서 소멸된다.

즉.. 종료되어야만 없어진다는것.. ㅋ


스택(stcak영역)

지역변수와 매개변수가 저장되는곳이다

함수호출이 완료되면 사라진다.


힙(heap영역)

프로그래머가 관리하는 메모리 영역이다

즉.. 동적할당하면 여기 생성된다.


중요한것이 있단다..

배열선언은 반드시 상수로 해야한다..

ex>int m=10;

    int a[m];

전제조건을 달자..

스택과 데이터영역에 할당될 메모리의 크기는 컴파일되는 동안에 결정되어야 한다 ..


출처 : http://blog.naver.com/toc21c/120027765357
2006/08/30 05:22 2006/08/30 05:22

운영체제의 개념 및 용어

1. 운영체제 개념

가. 운영체제의 정의

사용자와 컴퓨터 시스템 사이에서 원할한 의사소통을 할 수 있도록 인테페이스 기능 을 담당하는 시스템 소프트웨어이다.

나. 운영체제의 기능

1) 사용자에게 편리한 환경 제공

2) 컴퓨터 시스템 자원이 효율적으로 동작할 수 있도록 제어

다. 운영체제가 관리하는 자원

1) 프로세서 : 중앙처리장치를 말하며, 가장 H/W적인 자원이다.

2) 메모리 : 모든 종류의 저장 장치를 의미한다. 특히, 주기억, 보조기억, 가상기억 장치에 대해서 관리 기법을 중심으로 학습하게 된다.

3) 프로세스 : Program 중에서 CPU에서 실행될 수 있는 상태 또는 직접 CPU에서 실행되는 상 태의 모든 Program을 말한다.

4) 주변장치 : 입력과 출력 장치를 말한다.

5) 파일 : 사용자가 스스로 또는 system 내에서 자동으로 만들어내는 하나의 이름을 지닌 자 원을 말한다. 논리적인 무형의 형태이다.

라. 운영체제의 설계 목표

1) 처리량(Throughtput)의 향상 : 처리량 : 단위시간당 처리하는 일의 양

2) 경과 시간(TAT : turn-around time)의 단축 : 경과 시간 : 작업의 제출부터 작업의 종료까지의 시간

   TAT = Waiting time CPU time

3) 빠른 응답 시간 (fast response time)

4) 신뢰성(reliability) 향상

   신뢰성 : 시스템이 멈추지 않고 계속적으로 동작하는 것

   user가 접근 가능한 부분과 접근 불가능한 부분으로 구분, 연산이 틀림없이 제대로 하는 것

5) 사용 가능성(availability)

6) 폭넓은 이식성(portability) : 이식성 : 다른 하드웨어에서도 잘 동작하는 가에 관한 문제, 고급언어를 사용하여 해결

마. 운영체제의 구성

1) 제어프로그램 : 시스템 전체의 동작 상태를 감시, 감독하고 자원들을 관리하며 각종 입출력 장치를 제어, CPU 스케쥴링과 작업 관리, 기억 장치 관리 등을 담당한다.

가) 감시 프로그램(Supervisor Program) : 처리 프로그램의 실행 과정과 시스템 전체의 동작 상태를 감시

나) 데이터 관리 프로그램(Data Management program) : 주기억 장치와 보조 기억 장치 사이의 자료 전송이나 보조 기억 장치에 저장되 어 있는 자료의 갱신과 유지 담당

다) 작업 관리 프로그램(Job Management program)  : 다음에 실행할 작업을 선택하거나 작업의 시작, 종료, 실행, 일시 정지 등과 같 이 운영체제의 작업 스케쥴러 역할 및 입출력 장치의 배당을 담당하는 프로그램

2) 처리 프로그램

가) 언어번역 프로그램(Language Translator)  : 어셈블러(assembler), 컴파일러(compiler), 인터프리터(interpreter)등

나) 서비스 프로그램(Service Program)  : 파일복사, 텍스트 편집, 데이터 정렬, 병합, 프린터 조작등의 유틸리티 프로그램 과 같이 제어 프로그램을 보조해 주는 프로그램

다) 문제 프로그램(Problem Program) : 사용자가 자신의 문제 해결을 위해 작성한 프로그램

바. 프로그램 작성에서 실행까지의 순서
  Flow chart - Coding - Macro Processor - Language Translator - Object 생성 - Linker - Loader - Execute

사. 언어번역 프로그램

1) 컴파일러(compiler)

·고급언어에서 사용

·object code를 생성

·C. Pascal, COBOL, PL/I 등에서 사용

2) 인터프리터(interpreter)

·고급언어에서 사용

·object code를 생성하지 않음

·원시 프로그램을 한 문장씩 읽어 번역 및 실행을 바로 하는 방식

·실행시 속도가 느림

·BASIC, LISP, PROLOG, APL등에서 사용

3) 어셈블러(assembler)

·저급언어에서 사용

·어셈블리 언어로 작성된 프로그램을 기계어로 번역하는 프로그램

· 2 pass로 동작

1 pass : 심볼 테이블 구성

2 pass : 어셈블리 명령들을 기계어 코드로 변환, 프로그램 내에서 정의되지 않 은 외부 심볼이 링커(linker)에 의해 해결될 수 있도록 목적 프로그램 내에 재배치 정보 포함.

2 pass 로 구성하는 이유 : 변수 사용에 있어서 자유로움을 주기 위함

2. 매크로(Macro)와 서브프로그램(Sub Program)

반복되는 부분을 분리시켜 놓고 이름을 부여하고 이름을 호출하여 실행할 수 있도록 하는 것으로 매크로는 컴파일 이전에 확장 과정을 거쳐 실행시 빠른 장점이 있으며 서브프로그램은 확장 과정을 거치지 않아 저장공간을 줄일 수 있다.


Macro

Sub Program

공통점

반복되는 작업을 독립시켜 하나의 모듈로 작성하여 놓은 것

다른점

컴파일 전에 매크로 프로세서에 의해 확장이 일어남
실행이 빠름
메모리 사용량이 많음

컴파일 후 실행시에 Call/Return에 의해
실행이 이루어짐
실행이 느림
메모리 사용량이 적음

가. 매크로 처리기(Macro Processor) : 소스프로그램을 두 번 읽어서 처리하는 2 pass로 구성이 되며 매크로를 확장하여 확 장된 소스를 생성하는 기능을 담당한다.

나. 매크로 처리기의 동작 과정 : 매크로 정의 인식 - 매크로 정의 저장 - 매크로 호출 인식 - 매크로 확장 - 매크로 매개변수 치환

3. 로더(Loader)

외부기억장치로부터 정보들을 주기억 장치로 옮기기 위하여 메로리 할당 및 연결, 재비치, 적재를 담당하는 서비스 프로그램

가. 로더의 기능 및 순서

1) 주기억 정치 할당(allocation) : 목적 프로그램이 적재될 주기억 장소 내의 공간을 확보

2) 연결(linking) : 필요할 경우 여러 목적 프로그램들 또는 라이브러리 루틴과의 링크 작업

3) 재배치(relocation) : 목적 프로그램을 실제 주기억 장소에 맞추어 재배치

4) 적재(loading) : 실제 프로그램과 데이터를 주기억 장소에 적재

나. 로더의 종류

1) Compile and Go

번역기가 로더의 역할까지 담당하는 것으로 프로그램의 크기가 크고 한 가지 언어 로만 프로그램을 작성할 수 있다. 실행을 원할 때마다 번역을 해야 한다. 이러한 특성 때문에 로더라고 하기에는 부적합하다.

2) 절대로더(absolute loader)

단순히 번역된 목적프로그램을 입력으로 받아들여 주기억장치의 프로그래머가 지 정한 주소에 적재하는 기능을 가지는 간단한 로더.

·재배치라든지 링크등이 없음

·프로그래머가 절대 주소를 기억해야 함

·다중 프로그래밍 방식에서 사용할 수 없음

3) 재배치 로더 (relocating loader)

주기억 장치의 상태에 따라 목적 프로그램을 주기억 장치의 임의의 공간에 적재할 수 있도록 하는 로더

4) 링킹로더 (linking loader)

하나의 부프로그램이 변경되어도 다른 모듈 프로그램을 다시 번역할 필요가 없도 록 프로그램에 대한 기억장소할당과 부 프로그램의 연결이 로더에 의해 자동으로 수행되는 프로그램으로 직접연결로더(DLL : Direct Linking Loader)가 대표적임

5) 동적 적재(Dynamic Loading = Load on call)

모든 세그먼트를 주기억장치에 적재하지 않고 항상 필요한 부분만 주기억장치에 적재하고 나머지는 보조기억 장치에 저장해두는 기법

6) 연결 편집기(Linkage editor)

연결 편집기로 로드모듈을 만들어 놓으면 그 모듈을 기억 장치에 로드하여 바로 실행할 수 있도록 하는 방식으로 진보된 방식이며 요즘 사용하는 방식이다.

* 동적 연결 (Dynamic Linking)

실제 수행시 연결과 적재를 이행하는 기법으로 프로시저 세그먼트나 자료 세그먼트는 다른 어떤 프로시저가 수행도중에 실제로 그것을 요구할 때까지 프로그램의 어떤 세그먼트와도 연결되지 않음

4. 링커(Linker)

여러 Object를 한 개의 실행 가능한 형태의 file로 작성한다. 일반적으로 다른 곳에서 프로그램루틴이나 컴파일, 어셈블된 루틴들을 모아서 실행 가능한 루틴을 작성한다.

5. 초기 운영체제의 개념

가. 상주 모니터 (resident monitor)

나. Overlay : 큰 프로그램을 작은 단위의 모듈로 잘라서 필요한 부분만 RAM에 적재하여 실행 할 수 있도록 하는 기법으로 프로그래머가 모듈의 자르는 단위 및 연결 순서를 명시하여 야 하므로 사용이 불편하다. 이러한 오버레이의 단점은 가상메모리 기법을 이용하므 로 해결된다.

다. Swapping

여러개의 프로그램을 하나의 메모리에서 실행 될 수 있도록 하기 위해 사용하는 기법 으로 실행도중 Swap out 되어 보조기억 장치로 옮겨졌다가 실행시 Swap in 되는 것 을 반복하며 실행을 이루는 것을 말한다.

6. 운영체제의 처리기법 종류

가. 다중프로그래밍(Multiprogramming) : 1개의 주기억장치를 분할하여 여러개의 프로그 램이 적재되어 실행될 수 있도록 하는 기법.

나. 다중처리(Multiprocessing) : 여러 개의 CPU가 같이 동작하는 방법으로 1개의 프로 그램을 나누어서 처리하므로 처리 속도가 빠르다.

다. 분산처리(Distribute processing) : 통신으로 연결된 여러 개의 컴퓨터 시스템에서 여 러 개의 작업이 처리되는 방식으로 다중처리(Multiprocessing)에서는 1개의 작업에 대 해 여러 개의 CPU가 동작을 했지만 분산처리에서는 여러 개의 작업이 처리된다는 것 이 다른 점이다.

라. On Line Processing  : 작업 발생 장치와 처리 장치가 항상 연결된 상태로 동작하는 것으로 Batch 와 Real Time 처리 모두에 사용할 수 있는 방식임.

마. Off Line Processing  : 작업 방생 장치와 처리 장치가 독립적으로 구성되어 있으며, Batch 처리에서만 사용 할 수 있는 방식임.

바. Batch Processing  : 사건을 일정시간 또는 일정량 모아서 한꺼번에 처리하는 방식으로 작업과 작업 사이 의 Idle time이 없어진다. 운영체제 초기에 사용하던 처리 방식으로 저장매체에 제약 이 없는 방식이다.

* Idle Time : CPU가 처리 동작을 하지 않는 시간으로 이러한 시간이 많을수록 CPU의 효율성이 낮아진다.

사. Real Time Processing  : 사건이 발생 즉시 처리하는 방식으로 On Line으로만 사용하므로 On line real time 방식이라고도 한다. 은행 등에서 사용하는 처리 방식이다.

아. 버퍼링(Buffering) 과 스풀링(Spooling)

1) 버퍼링(Buffering)
주기억 장치의 일부를 큐 방식(FIFO:First In First Out)으로 동작하는 버퍼로 이 용하여 하나의 프로그램에서 CPU 연산과 I/O 연산을 중첩시켜 처리할 수 있게 하 는 방식으로 CPU의 효율을 높이는 방식이다. 버퍼를 2개 또는 그 이상 사용하는 방식을 이용하여 버퍼링의 효과를 높일 수도 있다.

2) 스풀링(Spooling)
주기억 장치를 이용하는 Buffering은 공간이 작으므로 보조기억장치를 이용하여 여 러개의 프로그램에 대하여 입력과 CPU작업을 중첩시켜 처리할 수 있게 하는 방식 으로 보조기억장치 중에서 직접접근 및 저장(DASD : Direct Access Storage Device)이 가능한 장치인 디스크를 사용한다.

3) 버퍼링과 스풀링의 비교


Buffering

Spooling

공통점

CPU 연산과 I/O연산을 중첩시켜 처리하여 CPU의 효율을 높임
Queue(FIFO)방식으로 동작

다른점

주기억 장치 이용
1개의 작업에 대해 CPU 작업과 I/O작업으로 분할

보조기억 장치 이용
여러개의 작업에 대해서 CPU 작업과 I/O 작업으로 분할



자. 병행처리와 병렬처리

1) 병행처리
하나의 처리기를 이용해서 두 개의 작업이 동시에 실행되는 방식으로 어느 한 순 간에는 한 개만 처리 동작을 하게 되는 것으로 interleaving 기법을 이용한 것이다.

2) 병렬처리
두 개의 작업이 다른 처리기에서 나란히 같이 실행되는 방식으로 한 순간에 두 개 의 처리 동작을 하게 된다.

2장 프로세스

1. 프로세스의 정의

① 실행중인 프로그램
② 주기억장치에 저장된 프로그램
③ PCB(Process Control Block)와 결합된 형태의 코드
、 PCB란 프로세스가 작업도중 필요한 정보나 스케쥴에 필요한 여러 가지 정보를 기억 하고 있는 구조체이다.
④ 작업 스케쥴러(Job Scheduler)에 의해서 생성되어 주기억 장치에 진입함

2. 프로세스와 프로그램의 차이점

프로그램은 수동적 개체(passive entity)이고 프로세스는 능동적 개체 (active entity)이며 일 반적으로 프로세스는 프로그램보다 작은 단위로 되어있다.

3. 프로세스의 계층

① 사용자 프로세스 : 사용자 코드를 수행하는 프로세스
② 운영체제 프로세스 : 사용자가 입력한 명령어를 해석하는 쉘 프로세스나 입출력 프로세스 또는 사용자 프로세스를 생성하는 등의 시스템 운영에 필요한 코드를 수행하는 프로세스

참조)
쉘(Shell) : 사용자의 명령어를 번역하여 실행을 지시하고 결과를 사용자에게 돌려주는 역할을 하는 부분으로 커널과 사용자 사이의 인터페이스 역할을 하는 부분이다. 도스에서 command.com이 쉘의 기능을 하며 유닉스에서는 여러 종류의 쉘이 존재한다. 이러한 쉘은 주기억장치에 상주하지 않고 사용자가 요구할 때 메모리로 적재되어 실행이 된다.

커널(Kernel) : 자원을 관리하는 모듈의 집합으로 운영체제 기능의 핵심적인 부분을 모아 놓은 부분이다. 메모리 관리 및 스케쥴링 인터럽트 처리등의 기능을 담당하며 사용자는 직접 커널의 기능을 제어할 수 없으며 단지 쉘에 의해 의뢰할 뿐이다. 커널은 항상 필요로 하는 부분이므로 메모리에 적재되어 있다.

4. 부모 프로세스와 자식 프로세스

프로세스는 사용자가 실행을 지시하거나 다른 프로세스의 호출에 의해서 실행 되는데 다른 프로세스의 호출에 의해 실행 되는 경우 호출한 프로세스를 부모 프로세스 호출된 프로세스를 자식 프로세스라고 한다.

부모 프로세스 (Parent Process)

자식 프로세스 (Child Process)

자식의 자원 공유를 제한할 수 있다.
동작 종료시 운영체제에게 자원의 사용 종료를 알린다.
자식 프로세스가 종료되더라도 종료되지 않는다.

부모의 자원을 공유하여 사용할 수 있다.
동작 종료시 자원을 부모 프로세스에게 반납한다.
부모 프로세스 종료시 자동으로 종료된다.


5. 프로세스의 상태 변환

프로세스는 실행도중 상태를 변화하면서 실행 종료를 하게 된다.
표 : 프로세스의 상태 변화 용어

변경 전

변경 후


비고

준비(Ready)

실행(Run)

Dispatch

CPU Scheduler

실행(Run)

준비(Ready)

Timer Run Out

Interrupt 방식

실행(Run)

대기(Wait)

Block

스스로 CPU사용 양보

대기(Wait)

준비(Ready)

Wake Up

문맥교환이 일어나지 않는다.

제출(Submit)

보류(Hold)

SPOOLer

프로세스의 상태 전이에 포함되지 않는다.

보류(Hold)

준비(Ready)

Job Scheduler

실행(Run)

종료(End)

End

음영처리된 부분은 문맥교환을 일으키는 상태 변화이다.


표 : 프로세스의 상태

제출(Submit)

사용자가 프로그램의 실행을 요구한 상태

보류(Hold)

프로그램 실행을 위해 SPOOL공간으로 이동한 상태

준비(Ready)

Job Scheduler에 의해 프로세스로 생성되어 주기억 장치로 이동한 상태

실행(Run)

CPU를 할당받아 실행중인 상태

대기(Wait)

I/O 종료 신호를 기다리는 상태

종료(End)

프로세스가 실행의 끝낸 상태


6. 문맥교환(context switching)

CPU를 사용하는 프로세스가 다른 프로세스로 새롭게 배당되는 교환과정을 문맥교환이라고 하며 문맥교환 시간은 짧을수록 CPU의 효율이 좋아지므로 스레드 개념을 사용하여 문맥교환 시간을 줄이기도 한다.

가. 문맥교환의 처리 과정

① 프로세스의 실행
② 운영체제 호출
현 프로세스의 상태 PCB에 저장
스케쥴링
새로 선택된 프로세스의 상태 PCB에 저장
③ 새로운 프로세스의 실행

참고) 스레드(Thread)
프로세스는 실행환경부분과 제어 부분의 두 부분으로 나눌 수 있는데 스레드란 프로세스의 제어 부분만을 말한다. 스레드는 실행에 필요한 최소한의 정보만 가지고 자신에 속해 있는 프로세스의 기억 장치나 파일과 같은 실행 환경을 다른 스레드와 공유하여 프로세스의 생성과 문맥교환 등의 오버헤드를 줄여서 운영체제의 성능을 개선할 수 있게 된다.

나. 스레드의 장점

① 병행성 증진
② 기억 장소의 낭비가 줄어든다
③ 프로세스의 생성이나 문맥 교환 등의 오버헤드를 줄여 성능이 개선된다.

참고) 프로세스의 종류

① 경량(light process)
여러개의 스레드가 같은 stack과 자원 공유
② 중량(medium process)
여러개 스레드가 각각의 stack과 자원을 갖음
③ 중량(heavy process)
1개의 스레드

7. 프로세스 제어 블록(PCB :process control block)

가. 정의 및 특징

① 프로세스가 변경되는 내용을 운영체제가 관리하기 위하여 사용하는 자료구조
② PCB는 프로세서 생성시에 만들어지며 주기억 장소에 유지되고 프로세서가 실행을 종료하면 해당 PCB도 함께 회수된다.

나. 내 용

① 프로세스 식별번호(process identifier)
② 프로세스의 상태
③ 프로세스 우선순위
④ 하드웨어 상태(각종 레지스터의 정보)
⑤ CPU 사용 시간, 대기 시간
⑥ 기억 장소 관리 정보 : 경계 레지스터나 페이지 테이블등에 관한 정보
⑦ 입출력 상태 : 배당된 입출력장치들과 대기중인 입출력 조작들의 정보
⑧ 프로세스에 활당된 자원에 대한 포인터
⑨ 부모/자식 프로세스 번호

8. 프로세스 관련 Scheduler

가. 프로세스의 분류

① Job scheduler (Long Term Scheduler)
프로세스를 생성하고 제거하는 동작을 하는 스케쥴러이다. 이 스케쥴러는 보류 상태 에 있는 작업들을 준비(Ready) 상태로 전이 시키며 프로세스의 제어 코드와 PCB를 연 결지어 주기억장치로 이동시킨다.
② Process Scheduler
= Dispatcher(=CPU scheduler, Short Term Scheduler)
준비 상태에 있는 여러개의 프로세스들 중에서 어떤 프로세스에게 CPU를 배당할 것인 가를 결정하는 스케쥴러이다. 준비(Ready) - 실행(Run)
③ Mid-level scheduler(Mid Term Scheduler)
실행 중인 프로세스를 블록화(=중지)하거나 또는 다시 활성화시키는 기법을 사용하여 시스템에 대한 부하의 양을 조절하는 기능을 담당한다. 실행상태에서 보조기억으로 이동한다. Swapping 기법을 사용하여 부하의 양을 조절하며 실제로 구현하지 않은 시 스템이 많다.

나. CPU 스케쥴러

① 공정성을 가져야 한다.
② 효율성을 가져야 한다.
③ 빠른 응답시간을 제공해야 한다.
④ 균형 있는 자원의 사용이 가능하도록 해야 한다.
⑤ 핵심자원을 차지하는 프로세스들에게 우선권을 주어야 한다.
⑥ 오버헤드를 최소화해야 한다.
⑦ 무한정 대기를 피해야 한다.
⑧ 대기 시간이 긴 작업에게 우선순위를 높여주는 방식인 Aging기법을 이용한다.
⑨ 우선순위가 주어진 경우 더 높은 우선순위를 가진 프로세스를 먼저 실행해야 한다.

9. 선점(preemptive)스케쥴링과 비선점(nonpreemptive)스케쥴링

가. 선점 스케쥴링
특정 프로세스가 중앙처리장치를 효율적으로 사용할 수 없는 시점에 이를 때마다 중 앙처리장치의 사용권이 다른 프로세스로 옮겨지는 방식으로 높은 우선순위의 프로세 스들이 급하게 실행해야 할 경우에 유용하다.

① 대화식 시분할 시스템에서 빠른 응답시간을 유지하는 데에 필요하다.
② 경비가 많이 들고 오버헤드까지 초래한다.
③ 효과적인 선점을 하려면 준비 상태의 프로세스가 많아야한다.
④ 우선순위를 고려해야 한다.
⑤ 문맥교환의 횟수가 비선점 방식에 비해서 많다.

나. 비선점 스케쥴링
어떤 자원이 어떤 프로세스에 할당이 되면 실행을 종료할 때까지 그 프로세스가 중앙처 리장치의 사용권을 독점하여 사용하는 것으로 짧은 작업들을 기다리게 되는 경우가 있 지만 모든 프로세스 관리에 공정하다.

① 응답시간의 예측이 쉽다.
② 문맥교환의 횟수가 적다.
③ 일괄처리 방식에 적합한 방식이다.
참조) 우선순위(Priority)
① 정적 우선순위(static priority): 프로세스 실행중 우선순위가 변하지 않는 것으로 구현이 용이하고 동적 우선순위에 비해 오버헤드가 적다.
② 동적 우선순위(dynamic priority): 처음에 정해진 우선순위를 상황에 맞게 계속조정하여 사용하므로 구현이 복잡하고 정적 우선순위에 비해 오버헤드가 크다.

10. 프로세서 스케쥴링의 종류

선점
Preemption

RR
Round
Robin

① FIFO스케쥴링과 같이도착 순으로 디스패치되는 방식
② 타임 슬라이스(time slice) 혹은 시간 할당량(time quantum)에 의해 시간 제한을 받음
시간할당량이 클 경우 : FIFO스케쥴링 방법과 차이가 없게 됨
시간할당량이 적은 경우 : 문맥교환 오버헤드가 상대적으로 커지게 되어 시스템은 대부분의 시간을 문맥교환(context switching)에 소비하게 됨
③ 대화식으로 사용하는 시분할 시스템에 적합
④ FIFO를 선점 스케쥴링으로 변형시킨 방법

SRT
Shortest
Remaing
Time

① SJF스케쥴링기법을 선점 기법으로 변형시킨 방법
② 시분할 시스템에 유용하다.
③ 작업이 끝나기까지 남아 있는 실행시간의 추정치가 가장 작은 프로세스를 먼저 실행함
④ SJF스케쥴링기법보다 오버헤드가 큼

Multilevel
Feedback
Queue

① 짧은 작업에 우선권
② 입출력 위주의 작업들에게 우선권
③ 큐에서 FIFO 형태로 이동
(마지막 단계의 큐에서는 프로세스가 종료될 때까지 RR방식으로 순환)
④ 낮은 단계로 내려갈수록 프로세스의 시간 할당량이 커짐


비선점

Non -

preemption

FIFO
First In
First Out

① 준비 큐(ready queue)에서 도착한 순서에 따라 디스패치 됨
② 응답시간 차가 적기 때문에 예측이 쉬움
③ 대화식 시스템에는 적합하지 않음

SJF
Shortest
Job First

① 작업이 끝나기까지의 실행시간의 추정치가 가장 적은 작업을 먼저 실행 함 (짧은 작업들에 우선적으로 서비스)
② 평균 대기시간을 최소화 시킬수 있음

우선순위
Priority

① 각 프로세스에게 우선순위를 부여하여 우선순위가 높은 순서대로 처리함
② 우선순위가 같을 때는 FIFO또는 SJF을 도입하여 실행 함

기한부
Deadline
Scheduling

작업들을 마감시간까지 완성하도록 계획한 스케쥴링

HRN
Highest
Response
Ratio
Next

① SJF스케쥴링기법의 약점인 긴 작업과 짧은 작업간의 지나친 불평등들을 어느 정도 보완한 방법
② 각 작업의 우선순위는 그 작업이 서비스를 받을 시간뿐 아니라 그 작업이 서비스를 기다린 시간 두 가지의 함수로 결정됨
응답률 = (대기한 시간 서비스 받을 시간)/ 서비스 받을 시간

프로세스

1. 병행(concurrent)프로세스

시스템 내에 다수의 프로세스들이 동시에 실행되는 것으로 프로세스들이 시스템 내에 동시에 존재하나 어느 한 순간에 단지 한 프로세스만 CPU에서 실행된다.

가. 병행성의 종류

① 단일 프로세스내에서의 병행성 : 우선순위 그래프나 Fork Join구조, 병행문
② 프로세스들간의 병행성(비동기적) : 완전히 독립하여 수행되거나 다른 프로세스들과 가끔 협력 하는 기능

나. 병행 프로세스의 종류

① 독립적 프로세스(independent process)
어떤 프로세스가 시스템에서 실행중인 다른 프로세스에게 영향의 주거나 다른 프로세스로부터 영향을 받지 않을 때의 프로세스
특징)

  • 프로세스의 상태는 다른 프로세스에 의해서 공유되지 않는다.
  • 프로세스의 실행은 결정적이다. 즉, 실행결과는 입력에 의해서만 결정
  • 실행은 재생가능한 것으로 실행결과는 같은 입력에 대해서는 항상 동일하다.
  • 실행은 나쁜 영향을 발생하지 않고 중단되고 재시작될 수 있다.

② 협력 프로세스(cooperating process)
어떤 프로세스가 시스템에서 실행중인 다른 프로세스에 영향을 받거나 줄 때의 프로세스
특징)

  • 프로세스의 상태는 다른 프로세스들과 공유된다.
  • 프로세스의 실행은 비결정적이다. 즉, 실행결과는 상대적 실행 순서에 의존하고 미리 예측될 수 없다.
  • 실행은 재생 불가능하다. 즉, 실행결과는 같은 입력에 대해 항상 같지 않다.

다. 병행문(concurrent statement)

Dijkstra[1965]의 parbegin/parend문에서 볼 수 있으며

parbegin
S₁;
S₂;
Sn ;
parend;

와 같이 표시한다.
S₁, S₂, ... Sn은 각각 단일문이고 병행으로 수행된다.

병행 문의 예제) x := (-b (b**2-4*a*c)**.5)/(2*a)
Parbegin
temp1 := -b;
temp2 := b**2;
temp3 := 4*a;
temp4 := 2*a;
Parend

라. 임계영역(critical section) 문제

① 임계영역이란 프로세스가 사용하면서 수정 가능한 자원을 나타내며 하나의 프로세스가 임계구역에서 수행중일 때 다른 어떠한 프로세스도 이 임계영역에서 수행 할 수 없다. 실생활에서 예를 들자면 화장실이나 공중 전화를 예로 들 수 있다.
② 이러한 임계영역 보호를 위하여 각 프로세스는 그 임계영역에 들어갈 수 있는지 미리 요청하여야 하는 모니터 구조를 사용한다.

    진입영역(Entry Section)

    임계영역 사용을 요구하는 부분

    임계영역(Critical Section)

    수정 가능 자원을 이용하는 코드 부분

    출구영역(Exit Section)

    임계영역 사용을 끝낸 후 처리 부분

    잔류영역(Remainder Section)

    나머지 코드부분

③ 임계영역은 3가지의 조건

  • 상호배제 : 하나의 프로세스가 임계구역에서 수행중일 때 다른 어떤 프로세스도 임계영역에서 수행될 수 없다.
  • 진행(Progress) : 하나의 프로세스가 임계영역 사용을 끝내면 다른 프로세스가 선택되어 임계영역을 사용한다.
  • 제한된 대기 : 한 프로세스가 임계구역에 대한 요청 후 일정한 기간 내에 요청이 받아들여져야 한다. 이를 위해 하나의 프로세스가 임계구역을 수행할 수 있는 횟수에 제한을 둘 수 있다.

마. 상호배제의 해결

① 소프트웨어적인 방법

  • 2개의 프로세스를 상호배제 하기 위한 방법 : Peterson
  • N개의 프로세스를 상호배제 하기 위한 방법
    - Dijkstra
    - Kunth
    - Eisenberg & Macguire
    - Lamport - 제과점 알고리즘 : 분산환경을 위해 개발되었음

② 하드웨어적인 방법

  • Test And Set : 원자적(atomic) 명령
  • Burns

바. 세마포어

① 공유변수 : S
② P(s) 연산 : 조건을 검사하여 프로세스의 임계영역으로의 진입을 검토하여 불가능한 경우의 프로세스를 대기 행렬(Queue)에 넣는다.
③ V(s) 연산 : 임계영역에 실행중이던 프로세스가 종료시 대기 행렬(Queue)에 대기 중인 프로세스가 있으면 임계영역에서 실행할 수 있도록 한다.
④ 대기 행렬 Queue : 임계영역의 사용을 위하여 대기하는 작

    repeat
    wait(mutex); P(s)
    critical section(임계구역)
    signal(mutex); V(s)
    remainder section(잔류구역)
    until false;

    P(s)
    s = s-1;
    if s < 0
    then begin
    wait(s)
    end;
    else
    임계영역

    V(s)
    s = s 1;
    if s <= 0
    then begin
    signal(s)
    end;

사. 프로세스간의 통신

① 공유기억장치기법

  • 통신을 하는 프로세스들간에 변수를 공유하여 사용하도록 하는 방식이다.
  • 운영체제는 기억장소만 제공하며, 응용프로그래머가 동기화 등의 책임을 진다.
  • 공유기억장치 기법의 사용예는 세마포어의 S변수에서 볼 수 있다.

② 메시지 시스템기법

  • 프로세스들 간에 send, receive등을 이용하여 메시지를 교환할 수 있도록 하는 방식이다.
  • 운영체제 자체가 전달의 책임까지 진다.
  • 분산시스템에서 이용하기 좋은 방식이다.
  • 직접 프로세스간에 전송하는 기법과 우편함을 통한 간접 기법이 있다.

3. 교착상태(Deadlock) ( = 무한대기)

다중 프로그래밍 환경에서 두 개의 프로세스가 서로 다른 프로세스가 가지고 있는 자원을 기다리고 있으며 자신이 차지하고 있는 자원을 내놓지 않는 현상으로 이 두 프로세스에게는 영원히 처리기를 줄 수 없게 된다.

가. 교착상태 필수조건

① 상호배제(mutual exclusion) : 어느 자원에 대해 한 프로세스가 이미 사용중이면 다른 프로세스는 기다려야 하는 것
② 점유와 대기(wait for) : 하나 이상의 자원을 할당받은 채로 나머지 자원을 할당 받기 위해 다른 프로세스의 자원이 해제되기를 기다리는 프로세스가 존재하는 경우
③ 비중단(no Preemption) : 자원을 할당받은 프로세스로부터 자원을 강제로 빼앗지 못하는 것
④ 환형대기(circular wait) : 자원 할당 그래프 상에서 프로세스의 환형 사슬이 존재하는 것

나. 자원할당 그래프
G = {E, V} E는 간선의 집합을 V는 프로세스의 집합을 말한다.
P={P1, P2, P3,...,Pn} : 프로세스의 집합
R={R1, R2, R3,...,Rm} : 자원의 집합

    기호

    프로세스

    네모

    자원

    자원→프로세스

    할당

    프로세스→자원

    요청

다. 교착상태 발견기법

① 자원할당 그래프에서 환형 대기를 나타내는 사이클(cycle)이 있으면 교착상태가 존재할 수 있다. (자원할당 그래프가 사이클을 포함하지 않으면 교착상태는 발생하지 않는다.)
② 사이클이 존재할 경우 그 사이클이 제거 될 수 있는지 검사한다.
(각 프로세스가 요구하는 자원을 모두 할당받았을 경우 제거 가능)
③ 사이클이 제거 될 수 있을 경우는 교착상태가 아니며, 제거 될 수 없을 경우는 교착상태이다.

라. 교착상태 예방 및 해결 방법

① 교착상태 예방(deadlock prevention) = 교착상태 필요조건의 부정

  • 상호배제조건의 부정
    자원을 공유할 수 있도록 한다. 자원을 공유할 수 없는 자원인 프린터등은 상호배제조건 부정을 할 수 없다.
  • 점유 및 대기조건의 부정
    프로세스가 수행을 하기에 필요한 모든 자원을 한꺼번에 요청하고 할당받는다.
  • 비중단조건의 부정
    원래 갖고 있던 자원을 일단 반납하고 필요하다면 다시 그 자원이나 다른 자원을 요구한다.
  • 환형대기조건의 부정
    각 자원 유형별로 고유번호를 부여하여 번호가 큰순으로 자원을 요구하도록 한다.

② 교착상태 회피(deadlock avoidance)
교착 상태가 발생할지 하지 않을지의 상태를 사전정보를 가지고 예측하여 안전하다고 판단될 경우 처리하는 방법이다. 이 경우 불안정하다고 판단이 되더라도 교착상태가 발생되지 않을 수도 있다.

  • 안정상태(safe state): 전체자원의 상황이 작업을 완료할 수 있는 상태
  • 불안전 상태 : 교착상태가 일어날 수 있는 상태.

③ 교착상태 발견(deadlock detection)
교착상태가 일어났는지를 자원할당 그래프를 이용하여 알아내는 과정이다.

④ 교착상태 복구(recovery from deadlock)
교착상태를 발견하고 교착상태에 있는 하나 이상의 프로세스들로부터 몇 개의 자원 선점(resource preemption) 시키는 것에 의해 복구 하는 방법으로 조작자에게 교착상태가 발생했음을 알려주어서 직접 수작업으로 처리 하도록 하거나 시스템으로 하여금 교착상태를 자동적으로 복구하도록 하는 방법이 있다.

  • 선점 방법
    - 모든 교착상태 프로세스들을 종료하는 것 : 이것은 교착 상태 사이클을 분해시키지만 회복하는데 많은 비용이 소요된다.
    - 프로세스를 하나씩 종료하는 것 : 교착상태 사이클이 제거될 때까지 하나씩 종료하는 방식으로 상당한 오버헤드를 요구한다.
  • 선점 프로세스(=희생자) 선택 기준
    회복시 필요한 비용이 가장 적은 것을 선점의 대상(=희상자)으로 선택한다.
  • 복귀(rollback)
    프로세스로부터 자원을 선점한다면, 그 프로세스를 어떤 상태로 놓을 것인지를 결정해야한다. 그러나 정상적인 수행을 계속할 수 없을 때에는 그 프로세스를 안전한 상태로 되돌려 놓고, 그 상태로부터 재시작해야 한다.(예: 완전복귀)
  • 기아상태(starvation)
    비용 요소에 기초를 두는 시스템에서 희생자 선택은 주로 동일한 프로세스가 매번 선택 될 수 있는데 이 경우 특정 프로세스가 반복해서 희생자로 선택될 경우 그 프로세스는 지정된 작업을 오랫동안 완료하지 못하는 상황이 되며, 이러한 상황을 기아상태라 한다.

4. 대기의 종류

① 제한된 대기
- 일정한 시간 내에 프로세스가 작업을 실행할 수 있는 상태(dispatch)가 되어야 한다는 조건이다.
② 바쁜 대기
- 임계영역에 진입할 수 있는지에 대한 조건을 계속 검사하면서 대기하는 상태를 말한다.
③ 무한 대기
- 상대방 프로세스의 상태를 모르고 실행을 멈추고 계속하여 기다리고 있는 상태를 말한다.
④ 점유 및 대기
- 실행하는데 필요한 자원을 일부만을 할당 받고 일부는 요청하고 있는 상태를 말한다.
⑤ 환형 대기
- 자원할당그래프를 그려서 할당과 요청의 상태를 보았을 때 환형(cycle)의 그림이 보이는 상태를 말한다.

3장 주기억장치 관리

1. 기억장치의 계층구조

    소용량, 고속, 고가






    대용량, 저속, 저가

    Register
    Cache Memory
    Associative memory(CAM)
    주기억
    CCD(Charge Coupled Device)
    보조기억 (Magnetic Drum, Magnetic Disk
    Magnetic Tape , Card)
    * Virtual Memory


    주기억장치는 프로그램이 실행되기 위한 실행코드와 데이터가 저장되는 메모리로 CPU에서 필요시 빠르게 접근할 수 있다.

2. 연속할당과 불연속 할당기법

가. 연속할당(contiguous storage allocation)

① 프로그램을 연속된 메모리 공간에 할당하는 방법으로 초기의 주기억장치 할당 방법으로 사용되었다.
② 기억장치의 공간보다 더 큰 프로그램은 적재하지 못 한다.
→ 이런 문제 해결을 위해서 Overlay기법 등을 사용하였다.

나. 불연속 할당(non-contiguous storage allocation, = 산재할당)

① 프로그램을 한 개 이상의 조각(Page, Segment)으로 나누어 필요한 조각만 주기억장치에 할당하는 방법으로 최근 사용하는 방법이다.
② 가상기억장치 기법으로 사용한다.
③ 프로그램의 크기에 상관없이 적재하여 실행할 수 있다.

3. 주기억장치 관리 : 연속 할당의 경우

단일 사용자 연속 기억장치 할당

다중 프로그래밍

고정분할 방식
① 절대 번역 및 적재 방식
② 재배치 가능 번역 및 적재 방식

가변분할 방식

가. 단일 사용자 연속 기억장치 할당(single user contigious storage allocation system)

① 한번에 한 사용자만 메모리를 사용하는 방법으로 컴퓨터 시스템의 모든 자원은 한 사용자가 마음대로 사용할 수 있다.
② 프로그램의 크기는 주기억장치 용량보다 클 수 없다.
단, Overlay 기법을 이용하여 주기억장치 용량보다 큰 프로그램을 실행 할 수 있다.
③ 경계레지스터(limit register, bound register, fence register)를 사용하여 시스템 영역보호를 한다.

나. 다중 프로그래밍(multiprogramming)

① 고정분할 다중 프로그래밍(fixed partition multiprogramming)

  • 주기억장치를 여러 사용자가 동시에 사용할 수 있도록 하여 CPU의 이용률을 높이고 처리량(Throughtput)을 늘릴 수 있는 방법이다.
  • ·사용전에 미리 영역을 나누어 놓고 적당한 곳에 프로세스를 할당한다.

(가) 절대번역(absolute translation)과 적재(loading)
절대번역이 되어 정해진 영역에서만 실행되는 것으로 기억장치를 낭비가 있을 수 있지만 구현하기가 쉽다.
(나) 재배치 가능번역(relocatable translation)과 적재(loading)
어떤 영역에서도 그 영역에 수용될 프로그램이 있으면 실행 가능한 경우를 말한다. 절대번역과 적재 상에서 발생하는 기억장치의 낭비를 막을 수 있으나 운영체제를 구현하는 측면에서 더 복잡하다.

② 가변분할 다중 프로그래밍(variable partition multiprogramming)

  • 실행 중에 프로세스가 필요로 하는 크기만큼의 메모리를 할당하여 적재하는 방식이다.
  • 가변분할 방식은 단편화 문제를 줄이기 위해서 고안이 되었지만 단편화 문제를 해결하지 못했다. (초기에는 단편화 현상이 나타나지 않지만 기억장소의 사용과 반납이 반복되면서 단편화 공간이 생긴다.)

4. 기억장치 관리기법

가. 반입기법(fetch strategy) : When
보조기억장치에서 주기억장치로 언제 프로그램과 데이타를 이동할 것인가에 관한 문제

① 요구호출(demand fetch)
현재 실행되는 프로그램에 의해 참조될 때 프로그램과 데이타를 주기억장치로 옮기는 기법
② 예상호출(anticipatory fetch)
실행되는 프로그램에 의해 참조될 가능성이 있는 프로그램과 데이터를 예측하여 미리 옮겨놓아 효율성을 향상시키기 위한 기법, 예상이 맞지 않을 경우 오버헤드가 발생 하게 된다.

나. 배치기법(placement strategy) : Where
새로 반입된 프로그램을 주기억장치 내의 어느 곳에 둘 것인가에 관한 문제

① 최초적합(first-fit) : 주기억장치 내에 분할된 공간 중 반입된 프로그램을 수용할 수 있는 첫번째 빈 공간에 배치하는 기법
② 최적적합(best-fit) : 주기억장치 내의 분할된 공간 중 적재시 단편화 공간이 가장 적게 발생하는 공간에 배치하는 기법
③ 최악적합(worst-fit) : 주기억장치 내의 분할된 공간 중 적재시 단편화 공간이 가장 크게 발생하는 공간에 배치하는 기법

다. 교체기법(replacement strategy, swapping) : What
새로 반입된 프로그램이 들어갈 장소가 없을 경우 주기억장치상의 어떤 프로그램이나 데이타를 교체대상으로 할 것인가를 결정하는가에 관한 문제

5. 단편화(fragmentation) 문제

연속으로 기억장치를 할당하여 사용할 경우 크기가 맞지 않아서 사용되지 못하는 공간이 생길 수 있는데, 이러한 공간을 단편화 공간이라고 한다.

가. 단편화의 종류

① 내부 단편화(internal fragmentation)
분할의 사용하고 남은 일부분을 말한다. 예를 들어 '100'크기를 갖는 분할에 '80'크기를 갖는 프로그램을 배치하였을 경우 '20'의 공간이 내부 단편화 공간이 된다.
② 외부 단편화(external fragmentation)
분할의 크기가 프로그램의 크기보다 작아서 사용되지 못한 것을 말한다. 예를 들어 '100' 크기를 갖는 분할이 있을 때 '120' 크기를 갖는 프로그램은 배치 되지 못하며 '100'의 공간이 외부 단편화 공간이 된다.

나. 단편화의 해결 : 재배치(relocation)를 이용한 해결
기억장치의 단편화 공간을 주소 재배치를 통하여 묶는 방법인 통합(coalescing)과 압축(compaction)을 사용하여 해결 할 수 있다.

① 기억장치의 통합(coalescing)

  • 인접된 공백들을 하나의 공백으로 만드는 것
  • 통합을 하여도 공백이 분산되어 있는 경우(사용공간이 사이에 있는 경우)는 큰공간이 생기지 않으므로 단편화 문제를 해결하지 못할 수도 있음

② 기억장소의 압축(compaction)

  • 주기억장치내의 모든 공백들을 하나의 공백으로 모으는 작업
  • 기억장소의 트림(burping the storage) 또는 쓰레기 수집(garbage collection)이라고도 함
  • 압축하는 동안 시스템은 모든 일을 중단해야 함
  • 압축은 기억장치상의 모든 작업들을 재배치시키게 되며, 프로그램이 로드 될 때 잃기 쉬운 재배치 관련 정보를 즉각 사용할 수 있는 형태로 유지하여야 함
  • 압축을 하므로 소모되는 시스템 자원이 압축을 통해 얻는 이익보다 더 커질 수 있음

4장. 가상 기억장치

1. 가상기억 장치 기법

  • 가상기억장치의 개념은 Atlas 컴퓨터시스템에서 처음 나타났다.
  • 가상기억장치를 구현하는 가장 일반적인 두 가지 방법은 페이지 기법과 세그먼트기법이다.

      페이징 기법(Paging)

        블럭의 크기가 동일한 고정된 크기로 가상 기억장소를 구성하는 방법

      세그먼트 기법(Segmentation)

        블럭의 크기가 다른 가변적인 크기로 가상기억장소를 구성하는 방법

  • 실행 프로세스가 참조하는 주소를 가상주소(virtual address)라 한다.
  • 주기억장소에서 사용할 수 있는 주소를 실주소(real address)라 한다.
  • 프로세스는 오직 가상주소만을 참조하지만, 그들은 실제로 실기억장치에서 실행되어야 하므로, 프로세스가 실행되면 가상주소는 실 주소에 사상되어야 한다.
  • 프로세스가 실행되는 동안 가상주소를 실주소로 바꾸는 절차를 동적주소 변환(DAT:Dynamic Address Translation)이라고 한다.
  • 프로세스의 가상주소공간에서 연속인 주소가 실주소에서 연속일 필요가 없다는 인위적 연속성을 가지고 있으며, 사용자는 프로시쥬어와 데이터가 실기억장치의 어디에 위치할 것에 대해 염려할 필요가 없다.

2. 기억장치 구성의 변천

    ① 실(real)기억장치

    • 단일사용자 전용 시스템
    • 다중프로그래밍
      - 고정분할 : 절대 번역 및 배치, 재배치가능 번역 및 배치
      - 가변분할

    ② 가상(virtual)기억장치

    • 순수 페이지 기법
    • 순수 세그먼트 기법
    • 페이지 기법과 세그먼트 기법의 혼용

3. 블럭사상

    ① 주소의 구조 v = (b, d)

      블럭번호(b)

      변위(d)

    ② 실제주소 r = 블럭 b의 시작을 나타내는 실제주소 b' 변위 d

      블럭사상이 프로세스가 실행되는 동안 동적으로 수행되기 때문에 사상이 효율적으로 구현되지 않는다면 수행을 저하시키고 가상기억장치 사용의 이점을 무효화할 것이다.

4. 페이지 기법

  • 주소의 구조 v = (p, d)

      페이지번호(b)

      변위(d)

  • 페이지는 블럭단위로 보조기억장치로부터 주기억장치로 옮겨져서 페이지 프레임이라 불리는 주기억장치의 블럭에 위치하게되며, 각 페이지 프레임은 입력되는 페이지와 같은 크기이다.
  • 페이지 프레임은 고정된 페이지 크기의 정수배에 해당하는 실기억장치 주소에서 시작한다.
  • 실제주소 r = 페이지 p를 나타내는 페이지 프레임 p' 변위 d
  • 페이지 사상 테이블

    페이지
    존재 비트

    보조기억장치주소
    (페이지가 실기억 장치내에 없을 때)

    페이지프레임 번호
    (페이지가 실기억 장치내에 있을 때)

    r

    s

    p'

    r = 0 : 페이지가 실기억장치내에 없는 경우
    r = 1 : 페이지가 실기억장치내에 있는 경우

  • DAT 기법

    • 직접사상에 의한 페이지 기법
    • 연관사상에 의한 페이지 기법 : 위치지정이 아닌 내용지정의 연관기억장치(associative storage)에 모든 페이지 사상 테이블을 놓은 것이다.
    • 연관 / 직접 사상에 의한 페이지 기법 : 한 프로세스의 전체 페이지 사상표의 일부분만 수용할 수 있는 크기의 연관기억장치를 이용(가장 최근에 참조한 페이지 항목만을 유지)

5. 세그먼트 기법

  • 프로그램(및 데이타)가 여러개의 분리된 실기억장치 블럭을 차지 할 수 있도록 해주며 각 블럭은 같은 크기일 필요는 없으나 연속된 기억장소로 구성되어야하며, 서로 다른 블럭이 서로 인접할 필요는 없다.
  • 페이지기법에 비해 물리적 개념보다 논리적이라는 장점을 가진다.
  • 세그먼트 기법의 위치지정 방법은 first-fit, best-fit, worst-fit방법과 동일하다.
  • 세그먼트 기법 시스템에서 기억장치보호를 구현하는 한 가지 방법은 기억장치 보호 키(storage protection key)를 사용하는 것이다.
  • 순수 세그먼트 기법에서의 가상주소 양식

      세그먼트 번호 s

      변위 d

      가상주소 v=(s,d)

  • 세그먼트 기법에서의 액세스 제어

    • 각 프로세스에게 세그먼트를 액세스할 권리를 주거나 다른 많은 세그먼트를 액세스하지 못하게 한다.
    • 액세스 제어형태

      엑세스 유형

      약자

      판독(Read)

      R

      기록(Write)

      W

      수행(Execute)

      E

      첨가(Append)

      A

  • 직접사상에 의한 세그먼트 기법

    • 고속 캐쉬 기억장치에 전체 세그먼트 사상표를 기억시키고 직접사상을 하는 세그먼트 주소 변환

      세그먼트
      존재비트

      보조기억장치

      세그먼트 길이

      보호비트

      세그먼트
      시작주소

      r

      a

      l

      R

      W

      E

      A

      s'

      . r = 0 : 세그먼트가 실기억장치내에 없는 경우
      . r = 1 : 세그먼트가 실기억장치내에 있는 경우
      . 보호비트 : ( 1 - 예, 0 - 아니오)
      . R : 판독액세스 W : 기록액세스 E : 수행액세스 A : 첨가액세스

6. 가상기억장치 관리기법

    ① 호출기법(Fetch strategy)

    • 페이지나 세그먼트가 언제 보조기억 장치로부터 주기억장치로 옮겨지는지에 관한 문제
    • 요구호출(Demand Fetch) : 실행중인 프로세스에 의하여 참조된 페이지나 세그먼트만이 주기억장치로 옮겨지는 기법
    • 예상호출(Anticipatory fetch) : 프로세스에 의하여 어떤 페이지나 세그먼트들이 참조될지를 미리 예상하여 그 페이지나 세그먼트가 가까운 장래에 참조될 가능성이 높고 또 그 페이지나 세그먼트가 적재될 수 있는 여지가 있다면 그 페이지나 세그먼트가 실제로 참조되기 전에 미리 주기억장치에 옮겨지는 기법

    ② 배치기법(Placement strategy)

    • 주기억장치에 적재되어야 할 페이지나 세그먼트를 주기억장치의 어느 곳에 적재시킬지를 정하는 기법
    • 페이징 시스템 : 주기억장치에 적재될 페이지가 사용 가능한 페이지 프레임이면 어디에 적재되어도 무관하므로 결정의 여지가 없음
    • 세그먼테이션 시스템 : 가변분할 다중 프로그래밍 시스템에서 필요로 한 만큼의 기억장소를 할당하는 기법

    ③ 교체기법(Replacement strategy)

      주기억장치가 이미 모두 할당 되어 있는 경우 새로 주기억장치에 적재되어야 할 페이지나 세그먼트를 위해 기존의 페이지나 세그먼트 중에서 어느 하나를 선택하여 주기억장치로 부터 제거하는 기법

7. 페이지 교체기법

    운영체제의 기억장치 관리 루틴은 새로 주기억장치에 적재되어야 할 페이지를 위하여 기존의 어느 페이지가 주기억장치로부터 제거되어야 할지를 결정하는 전략

    ① 최적화 원칙(principle of OPTimality)

      최적화 원칙은 최적의 성과를 얻기 위해서는 교체되어야 할 페이지가 그 이후로 가장 오랫동안 사용되지 않을 페이지가 교체되어야 함을 의미

    ② 무작위 페이지 교체(random page replacement)

      어느 페이지도 교체될 수 있음을 뜻하며 최악의 경우, 바로 뒤에 참조될 페이지도 교체될 수 있기 때문에 거의 사용치 않음

    ③ FIFO(First-In First-Out) 페이지 교체

    • 각 페이지가 주기억장치에 적재될 때마다 그때의 시간을 기억시켜 한 페이지가 교체될 때에는 주기억장치내에 가장 오래 있었던 페이지를 교체함
    • FIFO변칙( FIFO Anomaly 혹은 belady's Anomaly) : FIFO 페이지 교체 기법하에서 프 로세스에 더 많은 수의 페이지들을 할당할 경우 오히려 더 많은 페이지 부재가 발생하는 현상

    ④ LRU(Least Recently Used)페이지 교체기법

      가장 오랫동안 사용되지 않은 페이지를 선택하여 교체하는 전략으로 각 페이지들이 참조 될 때마다 그때의 시간을 테이블에 기억시킴

    ⑤ LFU(Least Frequently Used)페이지 교체기법

      참조된 횟수가 가장 적은 페이지를 교체함

    ⑥ NUR(Not Used Recently)페이지 교체기법

    • 근래에 쓰이지 않은 페이지들은 가까운 미래에도 쓰이지 않기 쉽다는 전략
    • NUR페이지 교체기법은 각 페이지당 2개의 하드웨어 비트로 구성
    • 참조비트 = 0 : 그 페이지가 참조되지 않았을 때
      참조비트 = 1 : 그 페이지가 참조된 적이 있을때
    • 변형비트 = 0 : 그 페이지 내용이 변형되지 않았을 때
      변형비트 = 1 : 그 페이지 내용이 변형되었을 때

8. 국부성(locality)

  • 국부성 : 프로세스들은 기억장치내의 정보를 균일하게 액세스하는 것이 아니라 어느 한 순간에 특정부문을 집중적으로 참조하는 성질

    ① 시간 국부성

    • 처음에 참조된 기억장소가 가까운 미래에도 계속 참조될 가능성이 높다.
    • 순환(looping), 서브루틴(subroutine), 스택(stack), 계산(counting)과 집계(totaling)에 사용되는 변수

    ② 공간 국부성

    • 하나의 기억장소가 참조되면 그 근처의 기억장소가 계속 참조될 가능성이 높다.
    • 배열순회(array traversal), 순차적 코드 실행(sequential code execution), 프로그래머들이 관련된 변수들을 근처에 선언하는 경향

9. Working Set

  • 페이지 폴트를 감소시키기 위해 Denning이 제안한 시스템으로 하나의 프로세스가 자주 참조하는 페이지들의 집합
  • Working Set는 프로세스를 효과적으로 실행하기 위하여 주기억장치에 유지되어야 하는 페이지들의 집합

10. PFF(Page Fault Frequency) 페이지 교체

  • 페이지 부재율은 페이지 기법 환경에서 프로세스가 얼마나 잘 실행하는가의 한 척도.
  • PFF 알고리즘은 프로세스의 상주 페이지 세트를 바꿈. 즉, 두 페이지 부재가 일어난 사이의 시간에 따라 빈도를 계산함

11. 페이지 크기

  • 페이지의 크기가 작으면 페이지 테이블이 커지며 결국 페이지 테이블 단편화(table fragmentation)를 초래한다.
  • 페이지 크기가 크면 실제로 참조되지 않는 명령문이나 데이타들이 주기억장치체 불필요하게 수반되어 적재된다.
  • 입출력 전송은 많은 시간을 소비하게 되므로 프로그램이 실행되는 동안 페이지 전송의 횟수를 줄이는 것이 좋다. 즉, 입출력 전송은 큰 페이지가 더 효율적이다.
  • 프로그램들이 참조에 있어서 국부성은 작아지는 경향이 있다.
  • 작은 페이지를 사용하면 내부 단편화(internal fragmentation)가 감소한다.

5장. 보조기억장치

1. 이동 헤드 디스크

  • 회전지연시간(rotational latency time;= 대기시간) : 데이타가 현재 위치에서 판독/기록 헤드에 인접한 위치까지 회전하는 데 걸리는 시간
  • 탐색시간(seek time) : 고정축을 새로운 실린더로 옮기는 과정
  • 전송시간(transmission time) : 판독/기록 헤드에 의해서 판독, 기록되는 시간

2. 디스크 스케쥴링

    ① 디스크 스케쥴링

      탐색시간을 최소화하기 위해, 대기중인 디스크 요청을 적절히 배열하는 작업. 즉, 레코드를 탐색하는 시간을 최소화하기 위하여 요구 대기행렬의 순서를 정하는 작업

    ② 작은부하의 상황에서는 FCFS가 요구를 처리하는 데 적당하고, 부하가 큰 상황하에서는 스케쥴링이 FCFS보다 더 좋은 수행결과를 가져옴

    ③ 스케쥴링 정책을 분류하는 기준

    • 처리량(throughput) : 단위시간당 처리되는 요구의 수를 극대화
    • 평균응답시간(mean response time) : (평균대기시간 평균 서비스시간)을 최소화
    • 응답시간 편차(variance of response time = 예견성: predictability) : 각각 의 항목이 얼마만큼 평균에서 벗어나 있는가를 나타내는 것으로 편차가 작을수록 예상 가능성이 커짐.

3. 디스크 스케쥴링 종류

    ① FCFS(First-Come First-Served) 스케쥴링

    • 먼저 도착한 요구가 먼저 서비스를 받는 것
    • 디스크가 작은 부하일 경우는 FCFS가 사용할 만하다. 그러나 부하가 커질수록 FCFS는 장치를 포화시키가 쉽고 응답시간이 길어진다.

    ② SSTF(Shorest-Seek-Time-First) 스케쥴링

    • 최단 탐색거리(탐색시간)를 가져오는 요구는 비록 대기 행렬의 제일 앞에 있지 않더라도 먼저 처리한다. 즉 실린더 지향의 방법.
    • FCFS보다 처리량이 많고, 중간정도의 부하량에서는 평균응답시간이 짧다.
    • SSTF 탐색 패턴은 중간범위의 트랙에 비해 최내각과 최외각 트랙이 서비스를 절대로 받지 못하는 심각한 국부성을 갖는 경향이 있다. → 특정요청들을 차별하는 경향으로 응답시간에 큰 편차가 생긴다. <