728x90

1.1 운영체제가 할 일 <p.4 ~ p.6>

 

->  운영체제는 다른 프로그램이 유용한 작업을 할 수 있는 환경을 제공한다.

->  운영체제는 다양한 사용자를 위해 다양한 응용프로그램 간의 하드웨어 사용을 제어하고, 조정한다.

 

[*] 사용자 관점

한 사용자가 자원을 독점하여 사용 (PC, 모니터, 마우스, 키보드 등 기기들을 함께 사용)하므로, 목표는 사용자가 수행하는 작업을 최대화하는 것이다. - 사용의 용이성

[*] 시스템 관점

"자원 할당자" 로써, 여러 가지 자원들(CPU 시간, 메모리 공간, 저장장치 공간, 입출력 장치 등) 이들을 관리자로써 어느 요청에 자원을 할당할지 결정

[*] 입출력-사용자 관점

운영체제는 제어프로그램이다. 컴퓨터의 부적절한 사용을 방지하기 위해, 입출력 장치의 제어와 작동에 관여한다.

[!] 운영체제의 정의

운영체제는 유용한 컴퓨팅 시스템을 만드는 문제에 열쇠가 되는 존재이다. 또한 컴퓨터 시스템의 기본 목표는 프로그램을 실행하고 사용자 문제를 더욱 쉽게 해결할 수 있게 하는 것이다.

-> 일반적으로 우리가 알고있는 운영체제의 모습은 커널이고, 컴퓨터에서 항상 실행되는 프로그램이다.

==> S/W가 실행되기 위해선 우선 그 S/W가 메모리에 적재되어야 한다. OS는 전원을 켜지자마자  메모리에 올라가야 하는데, 그 크기가 매우 커 통째로 메모리에 적재시킨다면, 자원의 낭비가 발생하게 된다. 그래서 그 중 필수적인 부분만 적재하는데, 그 부분을 커널이라고 한다.

-> 커널과 함께, 두 가지 다른 유형의 프로그램이 있는데, OS와 관련돼있지만, 반드시 커널의 일부일 필요는 없는 시스템 프로그램과 시스템 작동과 관련되지않는 모든 프로그램인 응용 프로그램이다.

 

1.2 컴퓨터 시스템의 구성 <p.7 ~ 16>

- 현대 컴퓨터는, [CPU - 구성요소 - 공유 메모리] 사이의 액세스를 제공하는

공통 버스를 통해 연결된 장치 컨트롤러로 구성된다.

-> 장치 컨트롤러는 제어하는 주변 장치와 로컬 버퍼 저장소 간에 데이터를 이동한다.

-> 일반적으로, 운영체제에는 각 장치 컨트롤러 마다 장치 드라이버가 있다.

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


위 그림은, CPU-Memory-Controller-Local_Buffer-I/O_H/W 간의 관계를 나타낸 그림이다.

1. 입출력 장치와 메인 CPU는 동시 수행이 가능하다.

2. 각 장치마다 이를 제어하기 위해 설치된 장치 컨트롤러가 있다.

3. 장치로부터 들어오고 나가는 데이터를 임시로 저장하기 위한 작은 메모리를 가지고있는데 이것이 로컬 버퍼이다.

버퍼(Buffer) 자체의 존재 의의는 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역이다. (데이터 송-수신 중 손실 대비)

 

[!]인터럽트(Interrupt) (p.7)

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

(인터럽트는 H/W와 S/W의 상호 작용에 핵심이다.)

 

<아래는 입출력 작업에서, 인터럽트 발생 과정이다.>

1. 장치 드라이버장치 컨트롤러에 적절한(사용자가 발생시킨) 레지스터에 값을 적재한다.

2. 장치 컨트롤러는 이러한 레지스터의 내용을 검사하여 수행할 작업(키보드 입력, 모니터 출력 등)을 결정

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

4. 전송이 완료되면, 장치 컨트롤러장치 드라이버에게 작업이 완료되었음을 알림

5. 장치 드라이버읽기 요청이면데이터(혹은 데이터 포인터)를 반환, 다른 작업일 경우 "쓰기 완료" Or "장치 사용 중" 등 과 같은 상태 정보를 반환

=> 위의 "4." 에서 컨트롤러가 드라이버에게 작업 완료를 어떻게 알리는가? -> 인터럽트를 통해 이루어진다.

 

<인터럽트 발생 후 과정>

1. CPU인터럽트되면, CPU는 하던일을 중단하고, 즉시 고정된 위치로 실행을 옮긴다.

==> + 현재 레지스터와, PC(ProgramCounter)를 보관하여 CPU 상태 보존

2. 이러한 고정된 위치는 인터럽트를 위한 서비스 루틴이 위치한 시작 주소를 가진다.

     (서비스 루틴에는 인터럽트 신호에 대응하는 기계어 코드들이 있다. -> 인터럽트 처리 매뉴얼)

3. 그 후 인터럽트 서비스 루틴이 시작된다.

4. 인터럽트 서비스 루틴 실행이 완료되면, CPU는 인터럽트(중단한) 됐던 연산을 재개한다.

 

[!] 인터럽트 처리 [!]

<인터럽트 처리 1:>

1. 인터럽트는 적절한 서비스 루틴으로 요청을 전달

2. 이러한 전달을 관리하기 위해 인터럽트 정보를 조사하는 일반적인 루틴 호출

3. 이 루틴은 인터럽트 고유의 핸들러를 호출

=> 위 과정은 2,3번으로 인해 매우 빈번하게 일어나는 인터럽트의 속도에 맞추기 힘들 수 있음

 

<인터럽트 처리 2:>

1. 인터럽트 루틴에 대한 포인터들의 테이블 이용

2. 테이블을 통하여 간접적으로 인터럽트 루틴 호출

3. 인터럽트 유발한 장치를 위한 인터럽트 서비스 루틴의 주소를 제공

4. "3." 을 위해 서비스 루틴 주소의 배열인 인터럽트 벡터가 인터럽트 요청과 함께 주어진 고유 장치 번호로 색인

-> 서비스 루틴(=인터럽트 핸들러)에 요소들의 주소를 배열화(모아서 정리함) 시킨것이 인터럽트 벡터

 

[!] 인터럽트 구현 [!]

-> CPU에는 "인터럽트 요청 라인" 이라는 선이 있는데, 이 선은 하나의 명령어 실행을 완료할때마다 CPU가 이 선을 감지한다.

 

인터럽트 구동 진행은 다음과 같다.

1. 컨트롤러가 인터럽트 요청 라인에 신호를 보낸것을 CPU가 감지한다.

2. 인터럽트 번호를 읽고 이 번호를 IV(인터럽트 벡터)의 인덱스로 사용하여 IHR(인터럽트 핸들러 루틴)로 점프

3. 해당 인덱스와 관련된 주소에서 실행을 시작한다.

4. 인터럽트 처리기가 하는 동작

     4.1. 작업중에 변경될 상태를 저장

     4.2. 인터럽트 원인 확인

     4.3. 필요한 처리 수행

     4.4. 상태 복원을 수행 (return_from_interrupt)

5. 컨트롤러가 인터럽트 요청 라인에 신호를 선언하여 인터럽트를 발생

6. CPU는 인터럽트를 Catch, 인터럽트 핸들러로 Dispatch, 핸들러는 장치를 서비스하여 인터럽트 Clear

 

[!] 벡터방식 인터럽트 [!]

핸들러가 모든 경우의 수를 탐색하는 것을 피하기위해, 매핑된 테이블이 있는 주소(IV)를 사용한다.

 

[!] 저장장치 구조 (p.12) [!]

CPU는 메모리에서만 명령을 적재할 수 있으므로 실행하기 위해선, 메모리에 프로그램을 적재해야한다.

또한 대부분 메인 메모리는 DRAM을 사용한다.

  • 컴퓨터 전원을 킬때, 가장 먼저 실행되는 프로그램은 부트스트랩 프로그램이며 이는 운영체제를 적재한다.
  • 모든 형태의 메모리는 바이트의 배열을 제공한다. 그리고 각 바이트는 자신의 주소를 가지고 있다.
  • 메모리 주소들에 대한 적재, 저장 명령을 통하여 상호작용이 이루어지는데
  • 적재 명령은, 메인 메모리 -> CPU 내부의 레지스터로 1바이트 OR 1워드 를 옮기는 것이다.
  • 저장 명령은, CPU내부의 레지스터 -> 메인메모리로 옮긴다.
  • CPU는 프로그램 카운터에 저장된 위치부터 실행하기 위해 메인 메모리에서 명령을 자동으로     적재한다.

폰 노이만 구조 시스템에서 실행되는 명령-실행 사이클은

  • 메인 메모리에서 명령을 인출(Fetch) 한 후 그 명령을 명령 레지스터에 저장한다.
  • 그리고 명령어를 해독(Decode)하여 메모리로부터 피연산자를 인출 -> 내부 레지스터에 저장한다.
  • 그 후 명령어를 실행(Excute)한다.
  • 명령어의 실행 결과를 저장(Store)하는 것으로 한 사이클이 끝이난다.

** 메모리 장치는 메모리 주소만을 인식한다. **

메인 메모리는 휘발성 + 적은 용량으로, 많은 내용의 데이터를 담을 수 없으며 지속할 수 없다.

 

따라서 보조저장장치가 등장했다.

보조저장장치란 우리가 흔히 알고있는 하드디스크(HDD)가 있고, 비휘발성 메모리(Non-Volatile-Memory) 장치가 있다.

 

[!] 입출력 구조 (p.15) [!]

 

 

 

https://ko.wikipedia.org/wiki/%EB%B2%84%ED%8D%BC_(%EC%BB%B4%ED%93%A8%ED%84%B0_%EA%B3%BC%ED%95%99)
chogyujin.github.io/2019/03/19/2.2-CPU%EC%99%80-IO-%EC%97%B0%EC%82%B0/

 

728x90
복사했습니다!