폴링과 인터럽트
<차이점>
- CPU가 각각의 주변장치들을 연속적으로 순환하며 혹시 인터럽트 요구가있는지 없는지를 수시로 체크하는 방법
- 주변장치의 상태를 보관할 필요 없음
- 주변장치에서 CPU로 들어오는 보고만을 취하는 방법
- CPU는 주변장치의 현재 상태를 보관해야 함
- 폴링과 반대로 CPU가 각 주변장치 상태를 일일이 파악하지 않고 입출력 요구 가 있을때만 CPU가 관여
- 인터럽트가 발생하면 CPU는 인터럽트 서비스 루틴에 의해 이를 처리하고 원 래 상태로 복귀
- 이 때, CPU의 상태를 저장하고 나중에 복구
- 주변장치가 데이터 전송을 위한 준비가 되면 CPU에게 인터럽트를 요구
- CPU가 인터럽트를 감지하면 수행 중이던 작업을 중지하고 데이터 전송을 처 리하기 위하여 인터럽트 서비스 루틴으로 분기하여 데이터 전송 수행
인터럽트의 종류
<정의>
- 정상적인 프로그램을 수행하는 컴퓨터 시스템에 예기치 않은 긴급 상황이 발 생할 경우 수행중인 프로그램을 중단하거나 비정상적인 종료를 하고, 운영체제 에 의해 적절한 조치를 취할 수 있도록 하는 기법
<종류>
인터럽트 구조 및 처리
<개요>
- CPU가 명령어를 수행하고 있는 동안에 발생하는 시스템의 어떤 응급 상황에 대처하기 위한 일련의 조치
- 인터럽트가 발생하는 원인에 따라 적절한 인터럽트 처리 루틴으로 최소한의 조치를 취하고, 인터럽트 서비스 루틴에 의해 발생하는 응급 상황을 해결
<단계별 인터럽트 처리 내용>
<문맥 교환(context switching)>
- 인터럽트가 발생했을 때 운영체제가 인터럽트를 당한 현재 실행중인 프로그램 의 상태를 저장한 후, 제어권을 인터럽트 서비스 루틴에게 넘겨주는 작업
<PSW(Program Status Word)>
- 명령문 수행의 순서를 조절하며, 실행 중이던 프로그램의 상태에 대한 여러 가 지 정보를 보관
버퍼링(buffering)
<개념>
- 한 작업의 연산과 함께 입출력을 동시에 수행하는 방법
- 데이터를 입력한 후, CPU가 이를 연산하려고 하는 순간 입력장치는 바로 다음 입력을 시작
- CPU와 입력장치는 동시에 동작하며, 양쪽의 속도가 비슷하다면 버퍼 이용이 효율적
- 실질적으로 버퍼링은 CPU와 입출력 장치의 둘 중에서 어느 하나가 먼저 종료 할 수 있기 때문에 항상 CPU와 입출력 장치가 동시에 동작할 수 없음
<버퍼를 이용하는 이유>
- CPU가 문자나 데이터 하나 하나를 읽을 때마다 입출력 채널에게 명령을 수행 하도록 한다면 매우 복잡하고 많은 작업량이 필요함
- 버퍼를 사용하여 문자나 데이터를 미리 읽어온 후 필요할 때마다 사용하게 한 다면 훨씬 효율적이기 때문
<유형>
- 환형 버퍼링(circular buffering)
단일 버퍼링
<개념>
- CPU는 채널이 버퍼를 채울 동안 기다리거나 혹은 다른 프로그램을 실행
- 버퍼를 CPU와 채널이 동시에 사용할 수 없으며, 상호간에 통신이 필요함
- CPU : 버퍼가 비어 있을 때만 버퍼에 데이터를 채울 수 있고,
- 채널 : 버퍼가 채워져 있을 때만 버퍼의 데이터를 비울 수 있음
이중 버퍼링
<개념>
- 단일 버퍼링의 단점을 보완하고 CPU간의 처리 성능을 향상시키는 방법
- 입출력 작업과 처리 작업이 동시에 진행될 수 있는 반면, 기억장치의 낭비를 초래할 수도 있음
<특징>
- 버퍼를 채우는 CPU 속도와 비우는 채널 속도가 비슷하면 최적의 효율
- 둘 중에 하나의 속도가 빠르다면 버퍼가 항상 비어 있거나 혹은 꽉 차 있 을 수 있음
- CPU는 채널에게 하나의 버퍼에 대한 입출력을 명령하면, 채널은 CPU의 명령 을 받고 독자적으로 입출력 수행
- CPU는 더 이상 입출력에 관여하지 않고 다른 버퍼를 채우거나 또 다른 작업을 수행할 수 있으므로 CPU의 효율 증대
환형 버퍼링
<개념>
- 환형 큐를 사용하여 여러 개의 버퍼를 원형으로 구성하여 입출력을 수행하는 방법
- CPU와 채널이 동시에 버퍼를 채우거나 비우는 각 작업을 독립적으로 수행
- 다수 개의 버퍼를 사용하므로 상당량의 기억장치를 차지하기 때문에 자칫 기 억장치의 낭비 요인이 될 수 있음
- 버퍼 수 많음 : 기억장치 낭비
- 버퍼 수 적음 : 버퍼를 기다리는 프로세스의 수 증가
- 버퍼의 수를 결정하는 일은 시스템 성능에 매우 중요한 요소
- CPU bound : CPU에 의한 연산이 많고 입출력 횟수가 적어, 버퍼 사용 비율이 적은 연산 위주의 프로세스
- channel bound : CPU에 의한 연산지 적고 입출력 횟수가 많아, 버퍼 사용 비율이 많은 입출력 위주의 프로세스
스풀링
<개념>
- SPOOL : Simultaneous Peripheral Operation On-Line
- 디스크의 일부를 스풀 공간이라고 부르는 매우 큰 버퍼처럼 사용하는 방식
- 사용 이유 : 입출력장치와 CPU간의 처리 속도 차이 해소
- 미리 입력 장치로부터 디스크로 레코드나 블록을 읽어 들이고,
- 출력 장치로 레코드나 블록을 직접 출력하기 보다는 디스크 상에 출력 파일로 저장하여 나중에 출력
<특징>
<버퍼링과 스풀링의 차이점 비교>
입출력 구조
- 운영체제는 입출력 장치에 입출력에 관련된 각종 명령어를 입력하고 인터럽트를 발견하고 오류를 처리함
- 또한, 단순하고 편리한 형태로 입출력 장치와 컴퓨터 시스템의 다른 부분간의 인터페이스 기능도 아울러 제공함
- 다양한 주변 장치들을 관리할 때 유지되어야 할 기능들
- 블록 단위의 데이터 전송 기능
- 컴퓨터 본체나 디스크, 테이프 등의 2차 기억장치와 외부 환경과의 인터페이스 기능
- 하드웨어와 독립적인 관리가 가능한 자원과의 독립성 유지 기능
- 프로세스 개념을 사용한 쉽고 편리한 입출력 수행 기능
입출력 하드웨어 장치
<블록 장치>
- 자신의 주소를 갖고 있으면서 고정된 크기의 블록으로 정보를 저장하는 장치
- 기본적인 속성은 다른 블록과는 독립적으로 각 블록을 읽거나 쓸 수 있음
<문자 장치>
- 어떤 블록 구조와도 상관없이 문자 스트림(stream)으로 송수신 가능
- 디스크처럼 주소 지정이나 탐색 동작이 필요 없음
- 터미널, 라인 프린터, 자기 테이프, 펀치 카드, 네트워크 인터페이스, 마우스
<장치 제어기(device controller)>
- 시스템의 모듈화와 일반적인 설계를 제공하기 위한 전형적인 입출력 장치의 전기적인 구성 요소
- 운영체제의 입출력 프로그래밍은 항상 장치가 아닌 장치 제어기와 연관되어 처리되기 때문에 장치 제어기와 장치의 명확한 구분 필요
- 컴퓨터는 CPU와 장치 제어기 사이의 통신을 위해서 단일 버스 사용
입출력 소프트웨어 설계시 고려사항
입출력 방식
직접 입출력 방식
<개념>
- CPU가 프로그램을 수행 중 입출력 명령을 만나면 직접 CPU가 나서서 입출력을 수행하는 방식
<수행 방식>
- CPU가 장치 플래그(flag)의 상태를 검사하여 장치 플래그가 0일 때 입출력 명령을 수행
- 데이터 입력시에는 장치 플래그가 0이 되면 입출력 장치의 데이터를 주기억 장치에 넣은 다음 장치 플래그를 1로 설정한 후, 입출력 장치 초기화
- 데이터 출력시에는 장치 플래그가 0이 되면 주기억 장치의 데이터를 입출력 장치에 보낸 다음 장치 플래그를 1로 설정한 후, 입출력 장치 초기화
간접 입출력 방식
<개념>
- 다중 프로그래밍을 구현하기 위해 이용하는 방식
- CPU가 직접 입출력 명령을 담당하지 않고 전용 입출력 프로세서인 DMA나 채널을 사용하는 방식
<수행 방식>
- 어떤 프로그램이 수행되는 도중에 입출력 명령이 발생하면 CPU에게 입출력명령의 종류, 장치 이름, 입출력 프로그램의 등과 같은 정보 전달
- CPU는 입출력 프로세서에게 입출력 명령을 수행토록 하고,입출력 프로세서로부터 입출력 완료 신호가 올 때까지 CPU 자신은 작업을 중단 하지 않고 다른 프로그램을 수행
- 이후에, 입출력 프로세서로부터 입출력 완료 신호가 인터럽트 방식에 의해CPU에게 보고되면,CPU는 현재 수행 중이던 프로그램을 멈추고 입출력이 발생했던 최초의 프로그램으로 복귀하여 중단되었던 프로그램의 수행을 재개
<DMA 방식>
- 입출력 장치로부터 데이터를 직접 기억장치로 전송하는 것
- 직접 입출력 방식과의 차이는 CPU 레지스터를 이용하지 않고 CPU의 사이클을 훔쳐(cycle steal) 입출력을 수행한다는 점
- 사이클 스틸 : CPU와 DMA가 각각 연산과 입출력을 위해 동시에 기억장치를 접근하는 경우, CPU는 기억장치 참조 사이클을 수행하여 입출력을 수행하는 것
- 데이터 전송은 기억장치 버스를 통하여 수행되도록 함으로써 빠르게 데이터전송을 수행
<입출력 채널 방식>
- 입출력 명령은 독립된 입출력 프로세서인 채널이 대신하는 것
- 입출력 명령을 수행하는 동안 CPU는 다른 프로그램을 수행함으로써 CPU의 효율을 향상시킴
- 입출력 프로세서 : PPU 또는 채널이라 불리는 프로세서 그 자체가 하나의 CPU와 유사한 성능을 갖는 프로세서
- 선택 채널(selector channel)
- 멀티플렉서 채널(multiplexor channel)
- 블록 멀티플렉서 채널(block multiplexor channel)
다중 프로그래밍 시스템
<개념>
- 여러 개의 프로그램이 마치 동시에 실행되는 것처럼 처리하는 방식
<특징 및 장단점>
- CPU 1개, 주기억 장소에 의해 여러 개의 프로그램이 존재하여 다중 작업 구현
- 다중 프로그래밍 시스템에서는 작업의 전환이 가능함으로써 CPU의 유휴 시간 을 감소시킴
- 여러 개의 작업을 준비 상태에 두고 관리하며, 어느 한 작업을 실행할 작업으 로 선정하기 위한 기억장치 관리 기법이나 CPU 스케쥴링 기법이 필요
- 스케쥴링 정책, 교착 상태, 병행 제어 및 보호 문제 등을 고려해야 함
다중처리 시스템
<개념>
- 동시에 프로그램을 수행할 수 있는 CPU를 2개 이상 두고 각각 그 작업을 분담 하여 처리할 수 있는 다중 작업 방식
- 사용 목적은 작업의 신뢰성과 컴퓨터의 능력을 증대 시키는데 있음
- 여러 개의 프로세서가 공동 기억장치를 통해 메모리를 공유하며, 다중처리기 의 단일 운영체제에서의 제어가 가능한 시스템
<특징 및 장단점>
- CPU를 여러 개 사용하므로 작업의 처리 속도와 신뢰성을 높임
- 한쪽의 CPU가 고장나도 다른 CPU를 이용하여 계속 작업 처리
- 운영체제는 여러 CPU 간의 기억장치 공유를 어떻게 지원할 것이며, 여러 CPU 들의 스케쥴링을 어떻게 할 것인가를 결정
- 신뢰성과 병행 계산 문제, 최적의 연결 기법, 같은 자원을 요구하는 CPU들간의 경쟁을 제어하는 문제 등을 고려
실시간 처리 시스템
<개념>
- 단말기나 제어 대상으로부터 직접성과 시한성을 갖는 자료가 발생할 때마다 즉시 처리하여 그 결과를 출력하거나 요구에 응답하는 방식
<특징 및 장단점>
- 자료가 발생한 지점에서 단말기를 통해 직접 입출력 되기 때문에 사용자의 수 고가 절감
- 자료가 임의로 도착하므로 입출력 자료의 일시 저장 및 대기가 필요
- 시스템에 장애가 발생할 때, 단순한 재실행이 불가능
분산처리 시스템
<개념>
- 하나의 대형 컴퓨터 시스템에서 수행하던 기능을 지역적으로 분산된 여러 대 의 단말기에 분담시킨 후, 통신 회로를 통하여 상호간에 교신 및 처리하는 방식
- 연산 속도와 신뢰성을 향상시키고, 컴퓨터 자원을 보다 효율적으로 이용하고 자 하는 방안
<특징>
- 통신 기능 : 다수의 노드가 네트워크로 상호 연결되어 있으며, 각각의 프로세 서간에 정보를 교환할 수 있음
- 자원 공유 : 다수의 노드가 네트워크를 통해 상호 연결되어 있으며, 한 노드에 있는 사용자는 다른 노드의 자원을 사용할 수 있음
- 계산속도 증가 : 특정 연산이 병행적으로 수행될 수 있는 다수의 부 연산 단위 로 분할될 수 있으며, 병행 수행을 통해 여러 노드에 연산을 분 담시킴
- 신뢰성 향상 : 한 노드의 장애가 나머지 노드에 영향을 주지 않고 계속 동작 할 수 있음
<운영체제의 종류>
초기 운영체제 시스템
- 초기의 컴퓨터 시스템은 하드웨어만 존재하고 운영체제는 존재하지 않음
- 초기의 작업 환경은 수작업에 의한 대화적인 성격을 띠고 있어 조작원(operator)이 곧 프로그래머였음
- 작업 준비 시간(setup time)이 많이 소요됨
- CPU의 유휴 상태(idle state)로 인한 비효율성
<특징 및 장단점>
- 프로그래머가 컴퓨터 하드웨어를 직접 조작
- 한 번에 하나의 작업만 수행되므로 구현이 단순
- 장치 구동기(device driver) 사용
- 작업은 독립된 여러 단계로 나누어져 실행되므로 준비 시간이 많이 걸림
- 비효율적인 CPU의 사용 및 작업 시간 낭비를 초래
상주 모니터
<CPU의 사용율을 높이기 위한 2가지 해결 방안>
- 전문 조작원을 고용함으로써 CPU의 유휴 시간을 줄임
- 유사한 작업을 하나로 묶어서 그룹별로 수행시킴으로써 작업준비 시간을 줄임
<상주 모니터(resident monitor)>
- CPU의 유휴 시간을 감소시키기 위한 방안
- 항상 주기억장치에 상주하고 있음
<상주 모니터에 의한 일괄처리 시스템의 작업 과정>
- 프로그래머는 상주 모니터에게 전달된 작업 제어 카드(job control card)에 의 해 전달
- 상주 모니터는 작업 제어 카드가 지시하는 대로 자동 작업 순서화를 제공
- 작업 제어 카드가 하나의 프로그램이 실행될 것이라는 것을 나타내면 상주 모 니터는 프로그램을 기억장치에 적재하고 제어를 프로그램으로 넘김
- 프로그램이 수행을 완료하면 제어는 상주 모니터로 복귀
- 상주 모니터는 다음 작업 제어 카드를 읽고 적합한 프로그램을 적재하는 일 등을 수행
- 모든 작업 제어 카드가 작업으로 번역될 때까지 이러한 일은 반복되며, 상주 모니터는 자동적으로 다음 작업을 계속 수행
일괄처리 시스템
<개념>
- 초기 시스템의 작업 준비 시간을 줄이기 위한 방안
- 요구 사항이 비슷한 여러 개의 작업들을 모아서 한꺼번에 처리하는 것
<특징 및 장단점>
- 초기에 하나의 작업을 실행하는 시스템에서는 시스템 성능이 크게 향상
- 작업 시간이 길어 반환 시간(turnaround time)이 늦음
오프라인 시스템
<개념>
CPU가 직접 카드를 읽기 보다는 카드에 있는 내용을 먼저 자기 테이프 에 복사하여 자기 테이프의 내용이 모두 차게 되면 자기 테이프를 컴퓨 터로 옮겨 프로그램이 자기 테이프로부터 내용을 읽어 오도록 함
내용을 바로 출력하는 것이 아니라 자기 테이프 상에 기록한 후 나중에 자기 테이프의 내용을 출력
<특징 및 장단점>
- 주 컴퓨터가 카드 판독기와 라인 프린터의 속도에 더 이상 영향을 받지 않고, 훨씬 빠른 자 이프의 속도에 영향을 받음
- 오프라인 시스템에서는 응용 프로그램이 직접 입출력 동작에서 오프라인 입출 력 동작으로 환하기 위해 어떤 수정도 필요치 않음
- 어떤 하나의 프로그램이 다른 입출력 장치와 함께 실행 될 수 있는 장치 독립성 이 보장
- 하나의 CPU에 대해 여러 대의 카드 판독기와 라인 프린터 및 자기 테이프를 사용할 수 있음
온라인 시스템
<개념>
- CPU와 주변장치가 온라인으로 연결되어 작동하고, 사용자와 컴퓨터 시스템간에 온라인 통신을 제공하여 사용자가 운영체제나 프로그램에 직접 명령을 주고 즉시 응답을 받을 수 있는 시스템
<특징 및 장단점>
- 실행 결과를 곧바로 받아 볼 수 있는 응답 시간이 짧음
- 실행 결과가 즉시 출력되기 때문에 프로그래머에게 프로그램 검사와 개발에 당한 유용성을 제공
- CPU는 프로그래머나 조작원에 의해 취해질 동작을 기다리는데 상당한 유휴 시간이 생김
시분할 시스템
<개념>
- CPU 시간을 각 사용자에게 균등하게 분할하여 사용하도록 하는 시스템
- 모든 컴퓨터 사용자들에게 동일한 서비스를 제공해 주는 것이 목표
<특징 및 장단점>
- 한 번에 주기억장치 내에 하나의 사용자만을 두는 교체(swapping) 기법 사용
- 자원 제어에 대한 대부분의 책임을 운영체제에게 전가 시킴으로써 운영체제가 복잡
- 운영체제는 기억장치에 복수 개의 프로그램을 동시에 유지해야 하는 문제가 발생
- 기억장치 관리 기법, 디스크 스케쥴링 정책 등이 필요
- 여러 사용자에 대한 공정한 자원 공유를 위해 CPU 스케쥴링 정책 필요
- 실행 중인 프로세스간의 통신 및 입출력 장치 사용에 대한 제어 및 관리 능력
<운영체제의 발전 과정>
제 0 세대(1940년대)
제 1 세대(1950년대)
- 작업 제어 언어(job control language) 사용
제 2 세대(1960년대)
- 다중 프로그래밍 시스템, 시분할 시스템, 실시간 처리 시스템의 개념 등장
제 3 세대(1960년대 중반 ~ 1970년대 중반)
- 하나의 컴퓨터 시스템에 여러 개의 프로세스들이 사용
제 4 세대(1970년대 중반 ~ 1990년대)
- 가상 기계(virtual machine) 개념 등장
- 사용자에게 친숙한 시스템(user friendly system)들이 개발되기 시작
제 5 세대(1990년대 ~ 현재)
- 지식 기반 시스템(knowledge base system)이 등장
- 인공지능(artificial intelligence)이 실현
- 자연어 인터페이스를 사용하여 인간과 기계간의 대화 기능이 실현
- ISDN, 개방형 시스템(open system)이 실현
- MACH, OSF(Open Software Foundation), Window NT가 실용화
*이미지는 구글을 활용하였습니다.
<자원 관리(resource management)>
키보드, 마우스, 모니터, 프린터 등 주변장치
CPU 스케쥴링
주기억장치, 가상 기억장치, 보조 기억장치
프로그램 파일, 데이터베이스 등
<자원의 관리 및 수행 기능>
컴퓨터 시스템 내의 모든 자원에 대한 현재의 상태를 파악
어떤 상황에서 적절히 대처하기 위한 자원 분배 정책을 결정
해당 프로세스에게 자원을 할당하고 운영함으로써 결정된 정책을 수행
프로세스로부터 할당된 자원을 회수
<운영체제의 개념>
정의
- 컴퓨터 시스템이 제공하는 모든 H/W 와 S/W 기능을 사용할 수 있도록 해 주는 가장 중요한 시스템 소프트웨어
- 한정된 시스템 자원(resource)을 효율적으로 사용할 수 있도록 관리 및 운영함으로써 사용자에게 최대한의 편리성 제공
- 컴퓨터 시스템과 사용자 간의 인터페이스(interface) 기능을 담당하는 시스템 프로그램
정리
- 주목적은 사용자가 컴퓨터 시스템(하드웨어)을 편리하게 사용하는데 있다.
- 부수적인 목적은 사용자 대신 컴퓨터 시스템을 효율적으로 사용하는데 있다.
- 운영체제는 자원의 관리자와 중재자의 역할을 동시 수행한다.
- 입출력 장치 관리
- 중앙 처리 장치 관리
- 기억 장치 관리
- 파일 시스템 관리
- 한정된 시스템 자원을 원활하게 사용할 수 있도록 해주는 맨-머신 인터페이스(man-machine interface)
<운영체제의 목적>
목적
- 사용자 측면 - 컴퓨터 H/W 와 S/W를 최대한 편리하게 사용할 수 있도록 함.
- 시스템 측면 - 컴퓨터 시스템의 성능을 최적화하여 생산성을 향상 시킴.
- 운영체제의 설계 - 시스템 성능 측면과 사용자 편의성 측면을 모두 고려하여
적절하게 설계
시스템 측면 - 고려해야 할 성능 요소들
일정 시간 내에 컴퓨터 시스템이 처리하는 작업의 양
사용자가 어떤 작업의 처리를 컴퓨터 시스템에 의뢰하고 나서 그 결과를
산출할 때까지 소요되는 시간
컴퓨터 시스템을 각 사용자가 요구할 때, 어느 정도 신속하게 한정된 시스템 자원을 지원해 줄 수 있는가
컴퓨터 시스템이 어느 정도 정확하게 동작하는 가를 나타내는 정도
세부 요소
- 컴퓨터 시스템의 초기화 설정
- 사용자와 컴퓨터 시스템 간의 편리한 인터페이스 정의
- 사용자들 간의 하드웨어 공동 사용
- 다수 사용자 간의 자원 공유
- 자원의 효율적인 관리를 위한 스케쥴링
- 입출력에 대한 보조 역할
- 오류 검사 및 복구
- 사용자들 간의 간섭 방지
- 자원의 사용량 계산
- 병렬 수행을 위한 편의 제공
- 데이터에 대한 보안과 신속한 사용
- 통신 네트워크의 관리