내맘대로 요약정리. 귀찮은 부분은 스킵. 재밌는 부분은 폭풍타자. 잇힝~



* 결정성 : 병행으로 실행되는 프로세스들은 그 순차적 실행의 흐름이 매번 다르지만 
   같은 조건과 입력이 주어질 때, 같은 결과를 산출해야 한다.

* 프로세스 시스템프로세스의 집합과 이들의 선행 제약의 두 가지 요소로 정의된다.
즉, 프로세스의 목록과 이들간의 순서가 정의되어야 한다.

- 선행 그래프 : 프로세스 시스템 내의 프로세스간 선행관계를 Directed Graph로 표현한 것. 물론 사이클이 없어야한다.

- 한 프로세스 시스템에 있어서, 비간섭 관계는 그 시스템이 결정적인가에 대한 필요충분조건이다.
즉, 프로세스들이 비간섭이면 그 시스템은 결정성이 있는 것이고,
결정성이 있는 시스템에서는 프로세스들이 비간섭 관계에 있는 것이다.

* 생산자/소비자 문제 : 유한한 크기의 버퍼에 생산자 프로세스와 소비자 프로세스가 병행으로 자료를 삽입/인출할 때 발생하는 문제.

- 상호 배제의 문제 : 공유 자료에 동시에 접근하여 발생하는 자료의 일관성 문제
- 동기화의 문제 : 버퍼가 full이면 인출하는 소비자가 대기하는 생산자를 깨워주고,
                                 empty이면 삽입하는 생산자가 대기하는 소비자를 깨워주어야 하는 문제.

- 임계구역 : 각 프로세스가 공유변수, 자료구조, 파일등을 베타적으로 읽고 쓸 수 있도록 설정한 코드 세그먼트
 상호간에 영향을 미치는 임계 구역은 서로에 대해 원소적 실행이 보장되어야 한다. 즉, 한 프로세스가 임계 구역을 실행하고 있는 동안에 문맥 교환이 발생하여 다른 프로세스가 실행되더라도 선점 당한 임계구역에는 진입하지 못하도록 해야 한다.

- 상호 배제의 요구조건 : 한 프로세스가 임계 구역을 실행 중일 때, 다른 어떤 프로세스도 임계 구역을 실행할 수 없다. 
  임계 구역을 실행하는 프로세스가 없는 상황에서 여러 개의 프로세스들이 임계 구역이 들어오고자 하는 상황에서는 반드시 하나의 프로세스를 선택하여 진입시키는 올바른 결정 기법이 있어야 한다.
- 제한된 대기 : 한 프로세스가 임계 구역 진입 요청을 보낸 후 수락을 받을때까지의 기간 내에, 다른 프로세스가 임계 구역을 실행할 수 있는 횟수에는 제한이 있어야 한다. 이게 뭔소리야 도대체..
 한 프로세스가 결론적으로 '수락을 받는다'는건 지금 임계구역을 사용중인 프로세스가 없단 얘기잖아. 그러니까 수락을 응답 받는거 아냐. 근데 "다른 프로세스"가 임계 구역을 실행하는 횟수가 존재한다고?! 이....이게 무슨 소리요 저자양반....

* 상호 배제의 S/W적 구현
- lock test 함수를 만들어서 하는 경우, 그 안에서 문맥 교환이 일어날 수 있으므로 상호배제가 성립되지 않는다.
- 올바른 방법은 한번 양보를 하고 대기하는 것이다. 대기에서 벗어나는 조건은 상대의 플래그가 0이 되거나 턴이 나에게 있을 때이다. 그렇게 해 놓으면 어느 상황에서 문맥 교환이 일어나더라도 상호배제가 성립된다.
- Bakery 알고리즘 : 여러개의 프로세스를 위한 상호배제 알고리즘
  대기하는 각 프로세스는 우선 번호표를 하나씩 뽑는다. 각 프로세스는 자신의 번호가 가장 작은 번호가 될 때까지 기다린다.

* 상호 배제의 H/W적 구현
- Test-and-Set : Lock에 대한 test와 copy를 CPU의 명령어로 제공 ( atomic instruction )
   타겟의 값을 1로 만들고, 이전의 타겟 값을 리턴하는 함수.
- Swap : 두 변수의 교체를 CPU의 명령어로 제공.( atomic instruction ) 
  누군가 lock을 0으로 리셋하면 다음 스왑에서 키 값이 0이 되고, 임계구역에 진입한다. 이 때 그 '누군가'는 이미 임계구역에서의 작업을 전부 마친것.
- interrupt-disable/enable : 임계 구역 내의 문맥교환 자체를 방지. 특권 명령어이기 때문에 커널 모드에서만 사용가능.

* 세마포어
- 일종의 객체.
- 정수 변수 1개와 프로세스 대기 큐, 정수에 대한 3가지 연산을 제공한다.
- 프로세스가 임계구역 진입 불가능시에는 대기 상태로 전환한다. 임계구역에서 작업을 마친 프로세스가 대기중인 프로세스를 준비 상태로 깨운다.
- 세마포어의 정수 변수는 양수일 때, 남은 자원의 갯수를 의미하고, 
                        음수일 때, 대기 중인 프로세스 갯수를 의미한다.
- 자원이 여러 개 있을 경우, 자원과 대기자를 동시에 관리할 수 있다. 
- 정수 변수의 초기값 n이 1인 경우, 공유변수에 대해 임계구역(mutex)이고,
                                    0인 경우, event에 의한 다중 쓰레드 간의 동기화에 사용된다.

- SW나 HW적인 방법들은 전부 "busy waiting" 알고리즘이다. 임계구역앞에서 대기하는 프로세스마다 busy waiting loop를 실행하는 것은 타임 슬라이스 낭비이다. 세마포어는 wait와 signal을 수행하는 짧은 기간에만 busy waiting loop를 실행한다.

* 병행 읽기/쓰기의 문제
- 공유 변수나 파일에 대해 쓰기 연산을 하는 프로세스는 모든 프로세스에 대해 상호 배제를 필요로 한다.
                                     읽기 연산을 하는 프로세스는 읽기 프로세스들과는 임계구역을 공유하고,
                                                                             쓰기 프로세스에 대해서는 상호 배제를 필요로 한다.

- 기아 : 무기한 연기 라고도 한다. 읽기 프로세스가 계속 되면 쓰기 프로세스는 계속 기다리기만 한다.
 기아의 해결책으로 aging 기법을 사용한다. 대기 시간이 길어지면 우선순위를 높이는 것이다.
 
- 모니터 : 세마포어를 클래스로 만든 형태. 데이터멤버와 멤버함수들로 구성된다.
















'학부 전공 > 운영체제' 카테고리의 다른 글

2. 컴퓨터 구조  (0) 2011.03.15
1. 운영체제 소개  (0) 2011.03.09



 1.  입출력 시스템의 구성


1) 개요
- 입출력은 메모리와 입출력장치 사이의 자료 이전이다.
- 입출력장치는 논리 회로와 입출력장치 자체로 구성된다.
- 입출력시스템의 최상위에는 응용프로그램이 있고, 운영 체제 커널에는 장치 구동기들이 있는데, 응용 프로그램과 장치 구동기 사이의 인터페이스로서 API가 존재한다.
- 장치 구동기는 하드웨어 인터페이스를 통해서 제어기에 연결되고 제어기에 입출력 장치가 연결된다.
- 각 구성요소 사이의 인터페이스가 결정되어야 한다.

2) 제어기 ( Device Controller )
- 주변장치는 제어기에 연결된다.
- 인터페이스 3종세트; API(응용프로그램과 커널의 장치구동기 사이)
                               HW 인터페이스(장치구동기와 제어기 사이); 장치생산업체에서 제공
                               장치구동기 - 커널 인터페이스
- 제어기와 주변장치 사이의 인터페이스는 운영체제에 속하지 않고 장치를 생산하는 업체에서 제공한다.
- 제어기와 운영체제 사이의 인터페이스는 장치 구동기( Device Driver )이다.
- 입출력을 수행하기 위해서 필요한 것은 입출력을 수행하는 장치 구동기와 제어기 사이의 상호작용이다.
- 제어기에는 busy와 done의 상태와 오류를 나타내는 상태레지스터, 장치에 대한 명령을 적재할 수 있는 명령레지스터, 그리고 자료레지스터(버퍼)가 있다.

 * 응용 프로그램에서 입력요구 발생시
1. 장치구동기가 제어기의 상태레지스터를 확인한다.
2. busy/done 모두 clear 상태이면 입력 명령을 명령레지스터에 적재하고
   제어기를 가동시키고 busy 플래그를 set한다.
3. 제어기가 장치에서 버퍼로 자료 이전을 완료하면 busy 플래그를 clear, done플래그를 set한다.
4. 인터럽트를 발생시켜 CPU에게 통보한다.
5. CPU가 장치구동기를 가동하여 버퍼에서 메모리로 데이터를 읽어온다. 그리고 done 플래그를 clear로 바꾼다.


 * 응용 프로그램에서 출력요구 발생시
1. 장치구동기가 제어기의 상태레지스터를 확인한다.
2. busy/done 모두 clear이면 busy플래그를 set한다.
3. 장치구동기가 메모리에서 버퍼로 데이터를 이동시킨다.
4. 출력 명령을 명령레지스터에 적재하여 제어기를 가동시킨다.
5. 출력이 완료되면 busy플래그를 clear, done플래그를 set한다.
6. 인터럽트를 발생시켜 CPU에게 통보한다. 그리고 done플래그를 clear로 바꾼다.

- 입력과 출력은 거의 비슷하다. done플래그를 set하는것은 입력에서는 '입력을 받아서 지금 버퍼에 받아놨다.'라는 의미이고, 출력에서는 '출력을 완료했다."라는 의미이다. 입력에서는 인터럽트가 발생되고 done플래그가 set되고 난 후 CPU가 버퍼에서 메모리로 읽어오는 작업을 하지만, 출력에서는 인터럽트가 발생되고 done플래그가 set되면 그걸로 끝이다.


3) 장치구동기 ( Device Driver )
- 운영체제에서 해당되는 제어기를 통제하여 입출력을 수행하는 부분이 장치 구동기이다.
- 장치 구동기는 두가지의 인터페이스를 제공해야한다. 응용프로그래머를 위한 API와 커널과 장치구동기 사이의 인터페이스가 그것이다.
- API는 표준API를 사용하여 추상화 된 명령을 제공한다
( open/close, read/write, seek )
- 장치구동기-커널 인터페이스는 디바이스드라이버가 바뀔때마다 커널을 다시 컴파일할 수는 없으니 표준화한것.
( plug & play 기능)

 2. 인터럽트 시스템
- CPU가 제어기에게 입출력 명령을 내리고 그 응답을 기다리는 것은 CPU를 낭비하는 것이므로, 인터럽트를 사용하여 제어기가 CPU에게 작업완료를 통보하고, 그때까지 CPU는 다른 작업을 처리하는 방법을 사용한다.
- 다수준 인터럽트 : 인터럽트가 들어오면 그 인터럽트보다 낮은 수준의 인터럽트의 처리를 중지한다.
 (인터럽트마다 우선순위를 결정하는 것)
 * 인터럽트가 발생하면
1. 현재 진행중인 프로세스 또는 하위의 ISR(Interrupt Service Routine) 수행을 중단한다.
2. 프로그램 카운터 및 레지스터 값들을 보존한다.
3. 인터럽트에 해당하는 마스크를 설정한다.
4. ISR로 제어를 넘긴다. ( 프로그램 카운터를 ISR의 첫주소로 세팅 )

 * 인터럽트 처리가 끝나면 -> 보존된 레지스터의 내용을 복구한다.


 3. 장치 경영 접근방식

1) 격리형 입출력 방식과 메모리-사상형 입출력 방식
- 격리형 입출력 방식에서는 제어기의 명령레지스터에 해당하는 명령을 적재하며, CPU와 제어기의 버퍼사이에 자료를 교환한다. 따라서 주변장치를 위해서 개별적으로 레지스터를 확보해야한다. (일종의 주소 공간)
- 메모리-사상형 입출력방식에서는 메모리의 논리적 주소 공간을 그대로 사용하여 제어기의 레지스터를 메모리에 사상시킨다. 이 방식은 명령의 개수를 줄이고 사용하기에 용이해서 많이 사용되고 있다.
(즉, 이 방식에서는 제어기에 실제 레지스터가 존재하지 않고, 메모리의 일부를 할당해서 사용하는 것이다.)

2) 폴링과 인터럽트 입출력
- 폴링은 바쁜 대기 방식으로서, 입출력 명령을 내리고 난 후, 입출력이 완료될 때까지 기다린다.
 이 때, 계속해서 상태를 조사하는 방법과 일정 시간마다 상태를 조사하는 방법이 있는데 주로 후자가 쓰인다.
- 인터럽트방식은 바쁜 대기를 해소하고 입출력이 완료될때까지 CPU가 다른 작업을 할 수 있게 한다.
- 입출력 명령을 내린 프로세스는 입출력이 끝나는 것을 기다리거나 프로세스에게 그대로 제어를 넘기도록 할 수 있다. 전자를 동기 방식, 후자를 비동기 방식이라 한다.
- 동기방식의 경우 CPU는 다른 프로세스를 처리할 수 있다.

3) 직접 입출력과 DMA 입출력
- 직접 입출력은 CPU가 메모리와 제어기의 자료 레지스터 사이의 자료 이전을 직접 관장하는 것이다.
- CPU와 입출력을 동시에 사용할 수 있지만, 매 입출력을 위해 인터럽트를 처리해야하는 단점이 있다.
 이것은 문자장치의 경우에는 문제가 되지 않으나, 디스크와 같은 블록장치의 경우에는 문제가 된다.
- 이러한 문제를 해결하기 위해 CPU의 도움 없이 독자적으로 메모리에 접근하여 한 입출력 명령으로 많은 자료(블록)를 입출력 및 전송하고, 한 블록의 처리가 끝날때마다 한번의 인터럽트를 발생시키는 방법을 쓴다.
 이 방식이 직접 메모리 접근(DMA) 방식이다.
- 즉, DMA입출력에서는 매 바이트마다 인터럽트가 발생하지 않고 한 블록에 한 인터럽트가 발생한다.

- 디스크에서 사용하는 시스템 버퍼는 블록 단위로 시스템 버퍼 풀에서 배정된다.
- 디스크 입출력 요구가 많아질 경우 작업의 큐로 형성되고 인터럽트 처리기에 의해 스케쥴되어 실행된다.
 디스크의 seek time 최적화를 위한 것이다.

- cycle stealing : CPU와 DMA가 동시에 메모리 접근을 요구하게 되면 DMA에게 우선권을 주고 CPU는 한 사이클을 쉰다.


 4. Buffering과 Spooling

1) 버퍼링 (Buffering)
- 서로 속도가 다른 하드웨어 사이에 자료 레지스터를 추가하여 속도를 개선하는 방법을 버퍼링이라 한다.
- 프로세스가 제어기의 자료레지스터A에 있는 자료를 읽는 동안, 제어기는 자료레지스터B에 다음 자료를 적재하는 것 같은 방법을 이중 버퍼링이라 한다.

2) 스풀링 (Spooling)
- 출력 명령이 주어지면 먼저 그 데이터를 디스크의 일정 장소에 저장하고, 별도의 출력 프로그램이 저장된 데이터를 순차적으로 프린터에 내보내는 방식을 스풀링이라 한다.
- 출력을 전담하는 프로그램을 스풀러라고 한다. 스풀러는 스풀 영역의 큐 정보를 감시하다가 생성되면 파일을 출력하는 기능을 한다.


 5. 입출력 프로세스의 처리

1) 비동기 VS 동기 입출력
- 비동기/동기 입출력은 응용 프로그램쪽에서 장치를 사용하는 관점에서의 차이가 있다.
- 동기식은 입출력을 시작시키고 그 작업이 끝날때까지 프로세스가 대기한다. CPU가 다른 프로세스에 사용된다.
- 비동기식은 입출력을 시작시키고 바로 다음 연산을 수행한다. 입출력과 상관없이 그 프로세스가 계속 CPU를 사용할 수 있다.
 입출력 종료를 알려주는 방법이 필요하다. ex)이벤트.
- 따라서 비동기식에서는 Call-back function을 구현해야 하며, Kernel thread를 사용할 수 있어야 한다.

2) 입출력장치 큐
- 입출력 장치는 빈번하고, 입출력장치의 속도는 느리기 때문에 입출력 프로세스들은 큐를 사용해서 작업을 대기시킨다.
- 키보드나 마우스처럼 언제 입력이 들어올지 모르는 장치들은 요구가 없는 상태에서도 인터럽트 처리기를 통해 버퍼링해 놓는다.

 6. 하드웨어에 의한 보호

- 운영 체제가 하는 일이 많아지고 입출력과 관계하여 할 일이 많아지게 되자, 시스템의 효율성을 높이기 위해서 시스템내의 많은 자원을 여러 프로그램이 동시에 공유하도록 하였다. 한 프로그램이 CPU를 사용하는 동안 다른 프로그램들이 입출력을 수행할 수 있게 되었고(다중 프로그래밍과 인터럽트), 여러 프로그램이 동시에 메모리를 사용할 수도 있게 되었다.
- 이런 자원의 공유는 시스템의 활용도를 높이는 반면에, 사용하는 자원을 보호해야하는 문제가 생겼다.
- 운영체제가 처리할 수 있는 오류(계산상의 오버플로우 등) 같은 경우는 기계가 멈추지 않지만, 프로그램이 운영체제의 영역을 침범하여 손상시키거나 입출력 프로그램에서 인터럽트를 잘못다루는 경우가 생기면 기계가 멈출 수 있다.


1) 이중 모드
- CPU의 상태레지스터 중 1비트를 모드 비트로 사용한다. 0이면 커널모드이고 1이면 사용자모드이다.
- 사용자 프로세스의 코드영역에 있는 명령어를 실행하는 경우, 사용자 모드로 실행한다. 인터럽트나 시스템/입출력 제어와 관련된 특권 명령을 수행할 수 없다. 메모리 참조 영역도 메모리 보호 하드웨어에 의해서 제한된다.
- 운영체제 코드영역에 있는 명령어를 실행하는 경우, 커널 모드로 실행한다. 하드웨어적인 제한이나 보호를 수행하지 않는다.
 사용자 프로그램에서 시스템 호출(트랩), 인터럽트 처리, 감지된 사용자 오류(트랩) 발생 시에 커널 모드가 된다.
- 사용자모드에서 커널모드로의 전환은 프로그램에서 독자적으로 할 수 없다.

2) 입출력 보호
- 불법 IO명령을 막기 위해 모든 IO명령을 특권 명령으로 구성하는 방법이 있다.
- 프로세스가 IO명령을 하기 위해서는 커널 모드로의 전환(특권 획득)이 필요한 것이다.

3) 메모리 보호
- 일반적으로 사용자는 사용자 모드에서 운영체제 영역 안의 인터럽트 테이블 및 처리기를 포함한 모든 영역에 접근하거나 수정할 수 없다. 또한 사른 사용자의 영역에도 마찬가지이며 자신의 코드 영역에 쓰는 것도 불가능하다.
- Base와 Limit레지스터를 사용하여 프로그램 공간을 정의해 놓음으로서 보호한다.
- 사용자 모드에서 주소를 생성했을 때에 확인하여 만약 범위(Base~Limit)를 벗어난 주소가 나오면 커널로 트랩한다.
- 리눅스나 유닉스커널에서는 segmentation fault가 발생한다.

4) CPU 보호
- 사용자 프로그램이 무한 루프에 들어가서 운영체제에게 제어를 넘기지 않으면 문제가 되므로, 제어권을 가져올 방법이 필요하다.
- 타이머 또는 클럭이라고 부르는 장치로 정해진 시간마다 인터럽트를 발생시킨다. 이 인터럽트는 정전이나 하드웨어 결함을 제외하고 가장 높은 우선순위의 인터럽트이다.
- 타이머가 있기 때문에 프로그램의 실행 시간이 제한되고 무한루프로 인한 CPU 독점을 방지할 수 있다.


 7. 기억장치 구조

- 하드웨어는 CPU, 메모리 그리고 주변장치로 구성된다.

- 메모리와 프로세서 안에 있는 레지스터들은 CPU가 접근할 수 있는 유일한 장치들이다.
- 메모리 접근 속도가 레지스터에 비해 상대적으로 느리기 때문에, CPU의 속도를 좌우하는 것은 메모리의 속도이다.
- CPU의 연산속도와 메모리 접근시간의 격차를 줄이기 위한 하드웨어적 기법으로 캐시 메모리를 사용한다.

- 디스크의 접근시간은 seek time, rotational delay, 입출력시간 및 전송시간으로 이루어진다.
- 디스크의 seek time은 CPU에 비해 매우 느리기 때문에 시스템의 성능을 저하시킨다.
- 디스크의 seek time을 줄이기 위해 버퍼링 기법이나 디스크 스케줄링을 사용한다.


 8. 기억장치 계층

- 다양한 기억장치는 속도와 가격에 따라서 계층 구조를 갖도록 조직할 수 있다.
- 계층구조는 속도, 용량, 가격의 비교 뿐만이 아니라, 하드웨어나 운영체제에 의한 버퍼링의 개념이 추가되어야 완성된다고 할 수 있다.
- 계층구조의 궁극적인 목적은 용량은 최하위 기억장치의 크기처럼, 접근 속도는 최상위 기억장치의 속도처럼 사용하는데에 있다.

1) 캐시
- 두 기억장치 사이에 접근시간이나 이동속도의 격차가 있을 때, 이를 완화하기 위해서 사용한다.
- CPU에서 메모리에 접근하는 경우 그 자료를 메모리보다 속도가 빠른 캐시에 복사하는 용도로도 사용한다.
- 알고리즘에 따라서는 90%이상의 확률로 캐시가 필요한 데이터를 가지고 있을 수 있다.




'학부 전공 > 운영체제' 카테고리의 다른 글

6. 병행 프로세스  (0) 2011.06.17
1. 운영체제 소개  (0) 2011.03.09

 운영체제는 컴퓨터 사용자와 컴퓨터 하드웨어간의 중개자로서 동작하는 프로그램이다.

 

 1. 운영체제란
 - 컴퓨터 시스템은 하드웨어, 운영체제, 응용프로그램, 사용자 부분으로 나눌 수 있다.
 - 운영체제는 일종의 정부이다. 시스템을 운영하여 자원을 적절하게 사용할 수 있게 한다.
 - 운영체제의 목적은 사용자에게 편의를 제공하는 것과 시스템을 효율적으로 운영하는데에 있다.
 
 2. 초기 시스템
 - 운영체제가 만들어지기 이전에는 컴퓨터가 굉장히 느렸기때문에, 사용자는 사용할 시간을 예약해서 그 시간 동안에만 사용해야했다.
 - 프로그램은 빨리 끝날수도, 늦게 끝날 수도 있기 때문에, 이런 방법은 컴퓨터를 효율적으로 사용할 수 없다.

 3. 초기 일괄처리 시스템
- 초기 시스템이 너무나 비효율적이라 운영자를 고용하여 사용자의 작업을 대신 실행하였다. 
그러나 작업의 준비시간이 너무 길고 여러 단계가 너무 복잡하여 운영자의 기능을 프로그램으로 대치하게 되었는데 
이것이 초기의 운영체제이다.
  
 1) 배치
- 요구수준이 비슷한 작업들을 함께 묶어서 실행함으로써 준비 시간을 줄일 수 있다. 
- 입력과 결과가 별도의 오프라인 카드리더나 테이프에 기록된다.

 2) 입출력 표준화 
- 테이프에 대한 입출력이 빈번해짐에 따라서 시스템에서는 표준 프로그램을 제공하여 편의를 제공하고 오류를 방지하였다.

 4. 일괄처리 시스템
 1) 하드웨어
채널 : 제한된 기능을 가지는 컴퓨터. 입출력장치의 제어를 위해서 설계되었다.
 명령 구조, 약간의 레지스터, 입출력장치와 통신하기 위한 하드웨어를 가진다. 메모리를 CPU와 공유하여, 메모리로부터 명령을 가져오고 명령에 의해 자료를 메모리와 주변장치 사이로 이동시킨다. 
 채녈은 CPU에서 입출력 정보를 받아 명령을 실행하기 시작하면, CPU와 독립적으로 작동한다.
(단 메모리 사이클에 대한 경쟁은 제외)

- CPU와 채널 입출력을 동시에 활용하기 위해 버퍼를 둔다. 연산하는 동안 읽거나 쓸 수 있게하여 입출력 대기시간을 없앤다.
인터럽트의 등장으로 대기루프 없이 CPU연산과 입출력 버퍼링을 병렬로 수행가능하게 되었다.
- 인터럽트는 하드웨어에 의하여 자동으로 호출되며, 메모리의 특정부분에 위치한 함수를 호출하는 것이다.

 2) 상주 모니터
- 입출력 관리자 또는 인터럽트 처리기를 메모리에 영구적으로 상주시켜야 할 필요성이 생겼다.
- 작업 제어 명령어, 적재기, 작업 순서 제어기를 상주시키에 되어 이 프로그램의 집합을 상주 모니터라 부르게 되었다.
- 상주 모니터의 설치로 처리율이 급격히 증가하였으나, 사용자가 늘어남에 따라 하드웨어와 소프트웨어의 표준을 어기는 일이 빈번해졌다. 상관없는 다른 프로그램을 지워버린다거나 입출력 오류로 비정상적 신호를 보낸다거나 하는 일이다.

3) 보호
- 잘못된 사용자 프로그램에서 상주 모니터가 있는 부분에 접근하여 자료를 덮어쓰는 일이 발생하자 상주 모니터를 보호할 방안이 필요하게 되었다.
- 모든 프로그램에서 입출력을 위해 상주 모니터의 루틴을 사용하게 하고, 시스템에서 요청된 연산을 미리 작성된 허용치를 참조하여 검사하게 함으로써 위험한 동작을 미연에 방지할 수 있게되었다.
- 사용자가 출력 상한선과 상한 시간을 제시하게 함으로써 프로그램의 오동작을 막기도 하였다.

 4) 작업 제어 명령어
- 규격카드나 제어 카드를 사용하여 필요한 조작을 기술하는 방법이 등장하였다. 
- 이 기법을 위해 시스템에 제어 명령어를 추가하게되었다.
- 각각의 작업은 해당하는 제어 카드를 가지고 있어서 작업순서가 이미 정의되어 있다. 그 작업이 모두 끝난 후에야 결과를 볼 수가 있다.

5. 다중 프로그래밍

- 다중 프로그래밍의 기본적인 개념은, 운영체제가 여러 개의 작업을 메모리에 적재하고, 적재된 작업중 하나를 선택하여 CPU를 할당하고 실행시키기 시작한다. 그 작업은 키보드 입력을 기다리거나 출력을 기다리거나 하는 상태가 될 수 있다. 그 때 다른 작업에 CPU를 할당하여 실행시키는 것이다.

 1) 스풀링
- 시스템이 작업을 실행하는 동안 별도로 카드 판독기의 작업을 테이프나 디스크에 일괄 저장하고, 시스템이 다음 작업들을 테이프나 디스크에 적재하는 방식을 사용하기 시작하였는데 이를 입력 스풀링이라 한다.

 6. 시분할 시스템
- 시분할 시스템은 사용자와 시스템 간에 온라인 통신을 마련하여 사용자가 운영체제나 프로그램에 직접 명령을 주고 즉시 응답을 받을 수 있도록 한다. 
-  여러 프로그램이 동시에 메모리에 존재할 뿐만 아니라 여러 사용자에게 빠른 응답시간을 제공하기 위해 CPU시간을 나누어서 각 작업에 번갈아 가며 할당하는데, 한번에 할당되는 CPU시간을 타임 슬라이스( time slice )라 한다.

 7. 개인용 컴퓨터
 8. 병렬 시스템
 9. 분산 시스템
 10. 실시간 시스템
 11. 내장형 시스템




'학부 전공 > 운영체제' 카테고리의 다른 글

6. 병행 프로세스  (0) 2011.06.17
2. 컴퓨터 구조  (0) 2011.03.15

+ Recent posts