티스토리 뷰

728x90

1. 통상적인 PC 컴퓨터 시스템 구조

 

⭐️ 현대의 컴퓨터 시스템 구성 : CPU + 장치 컨트롤러 + 구성요소(장치)

     -> 시스템 버스(주요 구성요소 사이의 통신경로)를 통해 연결되어있다.

 

⭐️ 장치 컨트롤러

: 특정 유형의 장치를 담당

: 둘 이상의 장치 연결 가능

: 일부 로컬 버퍼 저장소 특수 목적 레지스터 집합을 관리

: CPU와 장치 컨트롤러는 병렬로 실행되어 메모리 사이클을 놓고 경쟁

 

⭐️ 장치 드라이버

: 장치 컨트롤러의 작동을 잘 알고있고 나머지 운영체제에 장치에 대한 일관된 인터페이스를 제공

: 각 장치 컨트롤러마다 장치 드라이버 존재

 


2. 인터럽트 (Interrupts)

 인터럽트는 운영체제와 하드웨어 상호 작용의 핵심 부분을 담당한다. 프로그램이 지체되지 않고 바로 넘어가기 위해 인터럽트로 운영체제에게 신호를 보내주는 것이 필수적이다.

 

 하드웨어는 어느 순간이든 시스템 버스를 통해 CPU에 신호를 보내 인터럽트를 발생시킬 수 있다.


 인터럽트가 필요한 이유 

1.  일반적인 컴퓨터 작업(입출력을 수행하는 프로그램) 

1. 장치 드라이버는 장치 컨트롤러의 적절한 레지스터에 값을 적재한다.

2. 장치 컨트롤러는 이러한 레지스터의 내용을 검사하여 수행할 작업을 결정한다.

3. 장치 컨트롤러는 장치에서 로컬 버퍼로 데이터 전송을 시작한다.

4. 데이터 전송이 완료되면 장치 컨트롤러는 장치 드라이버에게 작업이 완료 되었음을 알린다.

5. 장치 드라이버는 읽기 요청일 경우 데이터 또는 데이터에 대한 포인터를 반환한다.

6. 장치 드라이버는 운영체제의 다른 부분에 제어를 넘긴다.

 

-> 이 과정에서 작업이 완료됐음을 알리기 위해 인터럽트가 사용된다.

 

2. 예외 처리

CPU 가 특정 기능을 수행하는 도중에 다른 급한 일을 처리하기 위해서 인터럽트가 사용된다.


 CPU가 인터럽트 될 경우 

1. CPU는 하던 일을 중단하고, 즉시 인터럽트를 위한 서비스 루틴이 위치한 시작주소로 실행을 옮긴다.

2. 서비스 루틴이 실행된다.

3. 서비스 루틴이 끝난 후 CPU는 원래 하던 연산을 재개한다.


 인터럽트 벡터 

 인터럽트는 적절한 서비스 루틴으로 제어를 전달한다. 전달을 관리하기 위해 인터럽트는 다음의 방법을 사용한다.

 

1. 인터럽트 정보를 조사하는 일반적인 루틴을 호출하고,

2. 이 루틴은 이어 인터럽트 고유의 핸들러를 호출한다.

 

이 방법은 빈번하게 발생하는 인터럽트를 빠른 속도로 처리하지 못한다.

 

따라서, 인터럽트 루틴에 대한 포인터들의 주소가 모여있는 배열 인터럽트 벡터를 활용한다. 이때, 일반적으로 포인터들의 테이블은 하위 메모리에 저장된다.


인터럽트 전과 후의 복원

 인터럽트는, 인터럽트에 의해 중단되었던 연산이 인터럽트가 발생되지 않았던 것처럼 만들어야한다. 그래서 인터럽트 구조는 인터럽트된 모든 정보를 저장할 수 있도록 되어있다. 

 

 만약, 인터럽트 루틴이 처리기의 상태를 변경할 필요가 있다면, 현재 상태를 저장해야한다. 예를 들어, 레지스터의 값을 변경할 경우 레지스터의 해당 시점의 상태를 저장해야한다.

 

[ 복원 절차 ]

1. 인터럽트를 서비스한 후

2. 저장되어있던 복귀 주소를 프로그램 카운터에 적재한다.

3. 인터럽트에 의해 중단되었던 연산을 재개한다.


기본 인터럽트 매커니즘

 비동기 이벤트에 CPU가 대응할 수 있다.

💡발생(raise)💡

1. CPU 컨트롤러가 CPU 하드웨어 내에 있는 인터럽트 요청 라인(interrupt request line)에 신호를 보낸다.

 

💡포착(catch)💡

2. 인터럽트 요청 라인에서 인터럽트 번호를 읽는다.

 

💡디스패치(dispatch)💡

3. 해당 번호를 인터럽트 벡터의 인덱스로 사용해서 인터럽트 핸들러 루틴(interrupt handler routine)으로 점프한다.

4. 벡터의 인덱스와 관련된 주소에서 인터럽트를 실행한다.

5. 인터럽트 처리기는 작업 중에 변경될 상태를 저장한다.

6. 인터럽트 원인을 확인한다.

7. 필요한 처리를 수행한다.

8. 상태 복원을 수행한다.

 

💡지우기(erase)💡

9. return_from_interrupt 명령어를 통해 CPU를 인터럽트 전 실행 상태로 되돌린다.

 


최신 운영체제의 정교해진 인터럽트

최신 운영체제는 CPU와 인터럽트 컨트롤러 하드웨어에 의해 다음과 같은 3가지 기능을 제공한다.

 

1. 중요한 처리 중에 인터럽트 처리를 연기할 수 있어야한다.

 인터럽트 요청 라인을 통해 중요한 처리 중 인터럽트를 연기할 수 있다. 인터럽트 요청라인의 유형은 다음과 같다.

    1. 마스크 불가능 인터럽트 (nonmaskable interrupt)

            : 항상 응답해야하는 인터럽트

            : 복구할 수 없는 메모리 오류와 같은 이벤트를 위해 사용

    2. 마스킹 가능 인터럽트 (maskable)

            : 항상 응답하지 않아도 되는 인터럽트

            : 인터럽트 되면 안되는 중요한 명령 시퀀스를 실행하기 전에 CPU에 의해 꺼질 수 있다.

            : 장치 컨트롤러가 서비스를 요청하기 위해 사용

 

2. 장치의 적절한 인터럽트 핸들러로 효율적으로 디스패치 할 방법이 필요하다.

인터럽트 체인

 인터럽트 핸들러를 검색할 필요를 줄이기 위해서 벡터 방식 인터럽트를 사용한다. 하지만 컴퓨터에는 인터럽트 벡터의 주소보다 많은 장치가 있다. 벡터가 가리키지 못한 장치를 위해서 인터럽트 체인이 나타났다.

 인터럽트 체인은 인터럽트 벡터의 각 원소는 인터럽트 핸들러 리스트의 헤드를 가리키는 구조이다. 인터럽트가 발생할 경우 요청을 처리할 수 있는 핸들러가 발견될 때까지 상응하는 리스트의 핸들러가 하나씩 호출된다.

 

3. 운영체제가 우선순위가 높은 인터럽트와 우선순위가 낮은 인터럽트를 구분하고 적절한 긴급도로 대응할 수 있도록 다단계 인터럽트가 필요하다.

우선순위 레벨(interrupt priority level)

긴급한 작업을 먼저 수행핳기 위해 인터럽트 우선순위 레벨을 구현한다.


3. 저장장치 구조

 모든 형태의 메모리는 바이트 배열을 제공한다.

 

 메인 메모리 RAM

 1. RAM(Random Access Memory), volatile(휘발성O) 

 2. CPU는 메모리에서만 명령을 적재할 수 있다.

 3. DRAM(Dynamic Random Access Mememory)라는 반도체 기술로 구현된다.


다른 형태의 메모리

Ex ) EEPROM (Electrically Erasable Programmable Read-Only Memory) 

: 전기적으로 소거 가능한 프로그램 읽기 전용 메모리

: 변경 가능하지만 자주 변경 X

: 속도가 느림

: 주로 사용되지 않는 정적 프로그램과 데이터(iPhone 장치 일련번호 및 하드웨어 정보) 포함

 

Ex) 기타 형태의 펌웨어

: 쓰기 작업이 자주 발생하지 않고 비휘발성인 저장장치

 

=> 컴퓨터 전원을 켤 때 가장 먼저 실행되는 프로그램 (=부트스트랩 프로그램)을 담는 메모리로 사용


⚫️ 적재 명령 : 메인 메모리로부터 CPU 내부의 레지스터로 한 바이트 또는 한 워드를 옮기는 것

⚫️ 저장 명령 : 레지스터 내용을 메인 메모리로 옮기는 것

 

폰 노이만 구조 시스템 명령-실행 사이클

1. 메모리로부터 명령 인출

2. 해당 명령을 명령 레지스터(instruction register)dp wjwkd

3. 명령 해독

4. 메모리로부터 피연산자를 인출하여 내부 레지스터에 저장

5. 피연산자에 대해 명령을 실행한 후, 결과는 다시 메모리에 저장


메모리  주소

메모리 장치는 단지 일련의 메모리 주소만을 인식한다.  메모리 주소가 어떤 식으로 생성됐는지 모른다. 메모리 주소에는 명령 카운터(instruction counter), 색인(indexing), 간접 주소(indirection), 리터럴 주소(literal address)가 포함되어있다.


보조저장장치

  프로그램 데이터가 메인메모리에 영구히 존재하지 못한다. 그 이유는 다음과 같다.

 

1. 메인 메모리는 모든 필요한 프로그램과 데이터를 영구히 저장하기에는 작다.

2. 메인 메모리는 전원이 공급되지 않으면 그 내용을 잃어버리는 휘발성 저장장치이다.

 

 따라서, 메인 메모리의 확장으로 보조 저장 장치가 쓰인다. 

 

보조 저장장치

💿 목적 : 대량의 데이터 영구 보존

💿 역할 : 대부분의 프로그램을 메모리에 적재되기 전까지 보조저장장치에 저장

💿 특징 : 메인 메모리보다 느리다. 비휘발성 저장장치이다. 

💿 종류 : 하드 디스크 드라이브(HDD), 비휘발성 메모리 장치 (NVM) -> 플래시 메모리

 

* NVS : 비휘발성 저장장치가 전원이 꺼졌을 때 내용을 유지하는 특성

3차 저장장치

💿 목적 : 다른 장치에 저장된 자료의 백업 사본 저장, 특수 목적으로만 사용

💿 특징 : 매우 느림, 매우 큼

💿 종류 : 광학 디스크, 자기 테이프

 

메모리가 작고 빠를수록 CPU에 가깝다.

속도, 용량, 휘발성/비휘발성의 차이가 있다.

 

기계적 : HDD, 광 디스크, 홀로그램 저장장치, 자기 테이프

전기적(NVM) : 플래시메모리, FRAM, NRAM, SSD


4. 입출력 구조

 시스템 버스를 사용하는 인터럽트 구동 I/O 형태는 소량의 데이터 이동에 적합하다. 대량 데이터 이동에는 직접 메모리 액세스(DMA)가 사용된다.

 DMA는 장치에 대한 버퍼 및 포인터, 입출력 카운트를 세팅한 후 CPU의 개입 없이 데이터를 전송한다. 이때 한 바이트마다 인터럽트가 발생하는 것이 아닌, 블록 전송이 완료될 때마다 인터럽트가 발생한다. 

728x90
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
글 보관함