컴퓨터 시스템 구조(Computer System Structures)
2. 컴퓨터 시스템 구조(Computer System Structures)
- 연산 구조
- 입출력 구조
- 저장장치 구조
- 하드웨어 보호 구조
2.1 컴퓨터 시스템 연산(Computer System Operation)
▶ 현대의 범용 컴퓨터 시스템
→ 공통 버스에 의해 연결된 여러 개의 장치 제어기와 하나의 중앙처리장치로 구성
[그림 2.1] 현대 컴퓨터 시스템
▶ 초기 프로그램(bootstrap program): 컴퓨터를 처음 구동시키기 위한 프로그램
→ ROM에 저장되어 있음
- 운영체제의 적재 및 수행: 운영체제의 커널을 기억장치에 적재하고, 첫 번째 프로세스 “init”을 수행시키고 사건이 일어나기를 기다리게 함
- 이때, CPU 레지스터, 기억장치, 장치 제어기 등을 포함한 시스템의 모든 상태를 초기화
▶ 사건(event): 인터럽트
- 하드웨어의 인터럽트
- 소프트웨어의 시스템 호출에 의한 인터럽트
→ 각 인터럽트마다 해당 서비스 루틴이 준비되어 있음
[그림 2.2] 출력을 수행하고 있는 단일 프로세스에 대한 인터럽트 시간 선
▶ 인터럽트 서비스 루틴으로의 제어 전달 방식
1) 인터럽트 정보를 조사하는 특정 루틴의 호출
→ 인터럽트 특정 처리기(interrupt-specific handler)를 호출
2) 인터럽트 테이블(인터럽트 벡터) 참조 ← 신속: 많이 사용됨
→ 장치 번호로 색인하여 인터럽트 서비스 루틴의 주소를 파악하고 인터럽트 루틴을 호출
▶ 인터럽트에 의해 중단된 명령의 주소 저장 방식
1) 고정 위치나 장치 번호에 따라 색인된 위치에 저장
2) 시스템 스택에 반환 주소를 저장 ← 일반적: 많이 사용됨
→ 이때, 프로세서의 상태(레지스터들의 값)도 저장되어야 함
▶ 여러 인터럽트의 처리 방식
1) 하나의 인터럽트가 처리되고 있는 동안에 다른 인터럽트는 지연되는 방식
2) 우선순위 정책에 의해, 보다 높은 우선순위의 인터럽트는 받아들여지지만 보다 낮은 우선순위의 인터럽트는 무시하는 방식
2.2 입출력 구조(I/O Structure)
▶ 장치 제어기(device controller): 약간의 지역 버퍼 저장 장치와 특수 목적용 레지스터를 관리
→ 주변장치와 지역 버퍼간의 자료 전송을 담당
2.2.1 입출력 인터럽트(I/O Interrupts)
▶ 사용자 프로세스의 입출력 요청 방식: [그림 2.3] 두 가지 입출력 방식
1) 동기식 입출력: 입출력이 시작되어 완료된 후에 제어가 사용자 프로세스로 반환되는 경우
- 입출력 완료를 기다리는 방법
① 대기 명령(wait instruction): 다음 인터럽트까지 CPU가 쉬는 방식
② 대기 루프(wait loop): 인터럽트에 의해 제어가 OS로 넘어갈 때까지 CPU가 수행하는 방식
Loop: jmp Loop
- 특성: 어느 순간이든지 수행해야 할 입출력 요청은 기껏해야 하나임
(장점) 인터럽트를 걸고 있는 장치가 명확
(단점) 여러 장치에 의한 동시 입출력 불가, 입출력과 연산의 중복 불가
2) 비동기식 입출력: 입출력이 완료되기 이전에 사용자 프로그램으로 제어가 넘어가는 경우
- 특성:
(장점) 시스템의 효율성 증가
(단점) 동시에 많은 입출력 요청을 기억할 수 있어야 함
- 장치 상태 테이블(device-state table): [그림 2.4] 장치 상태 테이블
→ 각 입출력 장치에 대한 항목과 해당 요청 리스트가 연결되어 있는 테이블
① 입출력장치는 입출력의 종료시 인터럽트를 검
② 운영체제는 어느 장치에서 인터럽트가 발생했는지를 밝히고, 장치 상태 테이블을 수정
③ 추가적인 요청이 있으면, 그 요청을 처리함
- 대화형 시스템의 경우, 요청 전에 단말기에서의 미리 글자 입력이 가능함
→ 각 입력 단말기마다 버퍼 필요
2.2.2 DMA 구조(Direct Memory Access Structure)
▶ DMA(direct memory access): 입출력 장치를 위한 버퍼, 포인터, 계수기를 설정한 후, DMA 장치 제어기는 전체 자료 블록을 중앙처리장치의 간섭 없이 직접 기억장치와 버퍼 저장장치 사이에 블록 단위로 전송하는 방식
→ 고속의 입출력 장치에 사용
- 블록 단위로 인터럽트 발생: 중앙처리장치의 실행 시간 증가
- 그러나 일반적으로 메모리는 한번에 하나의 워드만을 전송할 수 있기 때문에, DMA 제어기는 중앙처리장치로부터 기억장치사이클을 훔치는 사이클 스틸링(cycle stealing)을 함:
중앙처리장치의 실행 속도가 다소 저하되는 현상 발생
2.3 저장장치 구조(Storage Structure)
- 주기억장치: 고속, 소용량, 휘발성
- 보조기억장치: 저속, 대용량, 비휘발성
2.3.1 주기억장치(Main Memory)
▶ 주기억장치: 중앙처리장치가 직접 접근할 수 있는 유일한 대량 저장장치 (cf. 레지스터)
→ 즉, 프로그램은 수행을 위해 반드시 주기억장치에 있어야 함
- 적재 명령: 주기억장치로부터 중앙처리장치의 레지스터로 워드를 옮기는 것
- 저장 명령: 레지스터의 내용을 주기억장치로 옮기는 것
▶ 기억장치-사상 입출력(memory-mapped I/O): 기억장치의 일정 주소 공간이 입출력 장치의 레지스터에 (물리적으로) 사상되어 있어서, 그 기억장치 주소에 대한 판독/기록은 장치 레지스터에 대한 데이터 전송을 초래하게 되는 방식
- 비디오 제어기: 스크린의 각 위치가 기억장치에 사상 ← 고속의 응답시간을 요하는 장치
- 직렬 포트 제어기: 통신하는 문자를 기억장치의 한 바이트에 사상
▶ 캐시(cache): 버스로 연결되어 있어 여러 사이클이 소요되는 주기억장치 대신, 레지스터처럼 한 사이클로 접근되는 고속의 기억장치
→ 중앙처리장치와 주기억장치 사이에 위치함으로써, 두 장치의 속도차이를 극복할 수 있음
2.3.2 자기 디스크(Magnetic Disks)
▶ 하드디스크: [그림 2.5] 이동 헤드 디스크 메커니즘
- 플래터(platter), 판독-기록 헤드(read-write head), 디스크 암(disk arm)
- 원판면(surface), 트랙(track)/실린더(cylinder), 섹터(sector)
- 원판과 헤드 사이에는 공기 쿠션에 의해 떨어져 있음 → 고속 회전 가능
그러나, 정전 등의 이유로 디스크 표면에 헤드가 접촉할 위험이 있음
▶ 임의 접근 시간(random access time) = 탐색 시간(seek time) + 회전 지연(rotational latency)
- 탐색 시간: 원하는 실린더로 디스크 암이 움직이는 시간
- 회전 지연: 원하는 섹터가 디스크 헤더로 회전하여 위치하는 시간
▶ 플로피디스크(floppy disk): 값싸고 이동가능한 자기 디스크
- 하나의 플래터로 구성, 플라스틱 케이스
- 헤드가 디스크 표면에 닿아 있음 → 저속 회전
▶ 자료 전송 방법
- 디스크 제어기는 입출력 버스(I/O bus)에 연결되어 있음: EIDE, SCSI 버스
- 주 제어기(CPU)는 컴퓨터에 위치하여, 호스트와 내장된 캐시 사이의 전송을 담당
- 디스크 제어기는 디스크에 위치하여, 디스크 표면과 내장된 캐시 사이의 전송을 담당
2.3.3 자기 테이프(Magnetic Tapes)
▶ 특성
- 순차 접근만 가능: 임의 접근(random access) 불가
- 어떤 위치로 이동하는데는 오래 걸리지만, 일단 그 위치부터의 전송은 디스크와 유사
- 용량은 디스크보다 큼
- 예비용, 자주 사용하지 않는 정보의 저장, 시스템간의 정보 전송을 위한 매체용
2.4 저장장치 계층(Storage Hierarchy)
▶ 저장 시스템은 속도, 가격, 휘발성 여부에 따라 여러 계층으로 구성됨
[그림 2.6] 저장장치 계층
- 상위로 갈수록 접근 속도 증가
- 하위로 갈수록 비트당 비용 저렴
- 주기억장치까지는 휘발성, 디스크부터는 비휘발성
2.4.1 캐싱(Caching)
▶ 저장장치 계층에서 상위 저장장치는 하위 저장장치의 캐시로 간주할 수 있음
- 특정한 정보가 필요한 경우 먼저 고속의 캐시에 있는지를 조사하여 있으면 직접 사용하고,
- 그렇지 않으면 저속의 하위 장치에 있는 정보를 사용하는데,
- 만일 이 정보가 다시 사용될 확률이 높으면 캐시에 복사한다.
→ 할당 정책과 교체 알고리즘의 구현이 필요
* 일반적으로 캐시와 중앙처리장치(레지스터)간의 전송은 운영체제의 간섭 없이 하드웨어적으로 이루어지고, 디스크와 기억장치간의 자료 전송은 운영체제에 의해 이루어진다.
2.4.2 응집성과 일관성(Coherency and Consistency)
▶ 기억장치의 계층 구조에서는 동일한 자료가 서로 다른 저장장치 시스템에 퍼져 있을 수 있음
1) 단일 프로세서 환경: 단순히 계층 구조의 최상위에 있는 값을 인정하면 됨
2) 지역 캐시가 있는 멀티프로세서 환경: “캐시 일관성 문제”
한 캐시에 있는 어떤 정보의 값이 변경되는 즉시 그 정보가 존재하는 모든 캐시에 반영되어야 함
→ 일반적으로 운영체제의 제어 하에 하드웨어적으로 처리됨
3) 분산환경: 어떤 장소의 복사본이 갱신되면 가능한 한 빨리 다른 모든 복사본이 갱신되어야 함
2.5 하드웨어 보호(Hardware Protection)
▶ 트랩(trap): 프로그램의 오류가 하드웨어에 의해 감지되는 경우에 발생되는 운영체제에 대한 내부 인터럽트
▶ 공유 기법(스풀링, 다중 프로그래밍 등)은 이용률을 높이지만, 한 프로세스의 오류가 다른 여러 프로세스나 심지어 운영체제에까지도 악 영향을 미칠 수 있음.
ex) MS-DOS, 매킨토시 운영체제
▶ 오류 처리 과정: 오류는 하드웨어적으로 검출되고 운영체제가 처리함
- 오류가 발생하면, 하드웨어는 운영체제에 트랩을 발생함:
ex) 사용자 프로그램의 불법적인 명령 수행, 사용자 영역이 아닌 기억장소 공간의 접근 등
- 트랩은 인터럽트 벡터를 통해 제어를 운영체제에 넘김
- 운영체제는 프로그램을 비정상적으로 종료시키고, 적절한 오류 메시지와 프로그램 내용을 덤프
▶ 모든 오류가 하드웨어에 의해 감지되는 것이 아니므로, 항상 오류를 감지할 수 있는 방안으로 적어도 3가지의 보호 필요
- 입출력 보호
- 기억장치 보호
- CPU 보호
2.5.1 이중 모드 연산(Dual-Mode Operation)
▶ 하드웨어(비트)에 의해 제공되는 두 개의 독립된 연산 모드
- 모니터 모드(슈퍼바이저 모드, 시스템 모드, 특권 모드): ex) 비트 값 = ‘0’
- 사용자 모드: ex) 비트 값 = ‘1’
→ 시스템을 위태롭게 할 수 있는 명령을 ‘특권 명령’으로 지정하여 모니터 모드에서만 수행되도록 하고, 만일 사용자 모드에서 수행하려는 경우에는 운영체제에 트랩을 걸게 하는 방법
ex) Intel 8086: 이중 모드 미지원 - MS-DOS
Intel 80486: 이중 모드 지원 - 윈도우즈/NT, IBM OS/2
2.5.2 입출력 보호(I/O Protection)
▶ 모든 입출력 명령을 특권 명령으로 규정: 모니터 모드에서만 실행
→ 사용자 프로그램은 상주 모니터(OS)에 입출력을 수행하도록 요청해야 함:
“시스템 호출(system call)”, “모니터 호출”, “운영체제 기능 호출”
- 시스템 호출의 서비스 루틴은 운영체제의 일부
- 시스템 호출의 매개변수는 요청한 서비스가 무엇인지를 의미함
[그림 2.9] 입출력 수행을 위한 시스템 호출의 사용
2.5.3 기억장치 보호(Memory Protection)
▶ 운영체제는 사용자 프로그램에 의한 접근으로부터 보호되어야 하며, 사용자 프로그램간에도 보호되어야 함
→ 하드웨어(레지스터)에 의해 보호됨
1) 두 레지스터
[그림 2.7] 논리적 주소 공간을 정의하고 있는 기준 및 한계 레지스터
- 기준 레지스터(base register): 프로그램이 접근할 수 있는 최하위 물리적 기억장치 주소
- 한계 레지스터(limit register): 범위의 크기
* 기준 및 한계 레지스터의 값은 운영체제에 의한 특권 명령에 의해 적재될 수 있음
2) 사용자 모드에서 생성된 모든 주소 영역을 레지스터와 비교
→ 운영체제나 다른 프로그램으로의 접근은 트랩을 발생함
[그림 2.8] 기준 및 한계 레지스터를 가진 하드웨어 주소 보호
* 모니터 모드에서 수행되고 있는 운영체제는 모니터뿐만 아니라 사용자 기억 공간에 대해 접근할 수 있음
- 사용자 프로그램을 사용자 기억 장소에 적재 가능
- 오류 발생 시, 사용자 기억 장소의 덤프 가능
2.5.4 중앙처리장치 보호(CPU Protection)
▶ 사용자 프로그램이 무한 루프에 빠지지 않고 제어가 항상 운영체제에게 복귀될 수 있어야 함
→ “타이머(timer)”: 정해진 시간 후 인터럽트 발생
* 가변 타이머: 고정 클럭 + 계수기(counter)
① 타이머 설정 ← 특권 명령어(타이머 조작)
② 제어를 사용자 프로그램에 넘김
③ 타이머에 의한 인터럽트 발생
④ 제어를 모니터에 반환
⑤ 모니터가 수행 중단/시간 부여 판단 ← 특권 명령어(타이머 조작)
▶ 타이머의 다른 활용
1) 시분할 구현: 타임 슬라이스 N마다 인터럽트를 걸어 제어를 다음 작업으로 넘김
→ “문맥 교환(context switch)” 발생
- 운영체제는 각 타임 슬라이스의 끝에 여러 가지 보조관리 업무를 수행
ex) 사용자 프로그램의 수행시간 누적 등
- 운영체제는 레지스터, 내부 변수, 버퍼를 재 설정함
2) 현재 시간 계산
→ 그러나, 인터럽트 처리 시간으로 인해 시간이 늦어질 수 있음
대부분의 경우, 운영체제와 무관한 하드웨어 time-of-day 클록을 사용
2.6 일반적인 시스템 구조(General System Architecture): 이미 언급한 내용
'시리즈' 카테고리의 다른 글
원자와 영양물질 순환 (0) | 2014.03.24 |
---|---|
운영체제 구조(Operating System Structures) (0) | 2014.03.15 |
History of the Football World Cup (0) | 2014.03.02 |
뉴턴 운동 법칙::제 1법칙 관성의 법칙, 제 2법칙 가속도의 법칙, 제 3법칙 작용 반작용의 법칙 (2) | 2014.02.03 |
스토크스의 정리,비오 사바르의 법칙,앙페르 주회법칙,자속밀도와 정전자계에서의 맥스웰 방정식 (1) | 2014.01.25 |