기본 구성요소
컴퓨터는 처리기(CPU), 주기억장치(메모리), 입출력모듈, 시스템 버스로 이루어짐
CPU: 메모리와 데이터 교환
- PC(Program Counter: 프로그램 카운터)
- IR(Instruction Register: 명령어 레지스터)
- MAR(Memory Address Register: 메모리 주소 레지스터): 다음에 읽거나 기록할 메모리 내 주소 저장
- MBR(Memory Buffer Register: 메모리 버퍼 레지스터): 메모리에 기록되거나 메모리로부터 읽힐 데이터 저장
- IO AR(IO Address Register: 입출력 주소 레지스터)
- IO BR(IO Buffer Register: 입출력 버퍼 레지스터)
주기억장치: 주소가 부여된 장소들의 집합
입출력 모듈: 외부장치-처리기, 메모리 사이의 데이터 전송
명령어 실행
CPU는 메모리에서 한 번에 하나의 명령어를 읽음(명령어 레지스터에 현재 명령어 적재 → 프로그램 카운터 1 증가(프로그램 카운터에 다음 명령어 주소 저장)) → 수행(실행) → 프로그램 카운터에 있는 주소에 해당하는 명령어 읽음 → 실행 반복
인터럽트
입출력 모듈은 처리기 속도에 비해 현저히 느림 ⇒ 처리기의 처리율을 향상시키기 위함
종류: 프로그램 인터럽트, 타이머 인터럽트, 입출력 인터럽트, 하드웨어 실패 인터럽트
입출력 프로그램에서의 인터럽트
- 입출력 연산 준비
- 출력될 데이터를 버퍼에 복사
- 장치 명령을 위한 매개변수 준비
- 입출력 명령
- 인터럽트 사용 x: 실제 명령을 내리면 입출력이 끝날 때까지 기다려야 함(주기적으로 입출력 장치 상태 점검 or 연산이 완료되었는지 테스트 연산을 반복적으로 수행하며 대기)
- 인터럽트 사용 o: 사용자 프로그램으로 제어 넘김, 외부 장치는 실제 입출력 작업 실행외부 장치가 다시 서비스할 준비가 되면 인터럽트 요청 신호 전달 → 처리기는 수행 중이던 작업 보류, 인터럽트 처리기라는 프로그램으로 분기 → 입출력 실행한 프로그램 마저 실행
- ⇒ 입출력 작업이 사용자 프로그램의 명령어와 동시 실행
- 연산 완료
- 연산 성공, 실패를 나타내는 플래그 설정
인터럽트 처리
- 처리기로 인터럽트 신호 전달
- 인터럽트에 응답하기 전, 수행 중인 명령어 완료
- 처리기는 요청된 인터럽트가 있는지 검사 → 인터럽트를 발생시킨 장치로 수신 확인 전달
- 인터럽트 루틴으로 넘기기 전 수행 중이던 프로그램을 재기하기 위한 정보(문맥) 제어스택에 저장
- ex) 프로그램 상태 워드, 다음 명령어 위치, 프로그램 카운터 내용, 처리기 레지스터 내용 etc
- 인터럽트 처리 루틴의 진입 위치를 프로그램 카운터에 저장 → 인터럽트 처리 루틴 실행
- 인터럽트 처리기는 모든 레지스터의 내용을 스택에 저장
- 인터럽트 처리
- 처리 완료 → 저장된 레지스터 값 검색 → 레지스터에 다시 저장
- 문맥 정보를 통해 인터럽트 발생 이전으로 복원
중첩 인터럽트
인터럽트는 중첩되어 발생 가능
- 순차적 인터럽트 처리
- 하나의 인터럽트 처리 시 다른 인터럽트 요구 신호 무시 → 인터럽트 처리 루틴 완료 후 사용자 프로그램이 재개되기 전 인터럽트 발생했는지 검사
- 중첩된 인터럽트 처리
- 인터럽트 간 우선순위 정의 ⇒ 낮은 우선순위의 인터럽트는 높은 인터럽트에 의해 인터럽트 될 수 o
기본 구성요소
컴퓨터는 처리기(CPU), 주기억장치(메모리), 입출력모듈, 시스템 버스로 이루어짐
CPU: 메모리와 데이터 교환
- PC(프로그램 카운터)
- IR(명령어 레지스터)
- MAR(메모리 주소 레지스터): 다음에 읽거나 기록할 메모리 내 주소 저장
- MBR(메모리 버퍼 레지스터): 메모리에 기록되거나 메모리로부터 읽힐 데이터 저장
- IO AR(입출력 주소 레지스터)
- IO BR(입출력 버퍼 레지스터)
주기억장치: 주소가 부여된 장소들의 집합
입출력 모듈: 외부장치-처리기, 메모리 사이의 데이터 전송
명령어 실행
CPU는 메모리에서 한 번에 하나의 명령어를 읽음(명령어 레지스터에 현재 명령어 적재 → 프로그램 카운터 1 증가(프로그램 카운터에 다음 명령어 주소 저장)) → 수행(실행) → 프로그램 카운터에 있는 주소에 해당하는 명령어 읽음 → 실행 반복
인터럽트
입출력 모듈은 처리기 속도에 비해 현저히 느림 ⇒ 처리기의 처리율을 향상시키기 위함
종류: 프로그램 인터럽트, 타이머 인터럽트, 입출력 인터럽트, 하드웨어 실패 인터럽트
- 인터럽트 없음 2. 인터럽트: 짧은 입출력 대기 3. 인터럽트: 긴 입출력 대기
입출력 프로그램에서의 인터럽트
- 입출력 연산 준비
- 출력될 데이터를 버퍼에 복사
- 장치 명령을 위한 매개변수 준비
- 입출력 명령
- 인터럽트 사용 x: 실제 명령을 내리면 입출력이 끝날 때까지 기다려야 함(주기적으로 입출력 장치 상태 점검 or 연산이 완료되었는지 테스트 연산을 반복적으로 수행하며 대기)
- 인터럽트 사용 o: 사용자 프로그램으로 제어 넘김, 외부 장치는 실제 입출력 작업 실행외부 장치가 다시 서비스할 준비가 되면 인터럽트 요청 신호 전달 → 처리기는 수행 중이던 작업 보류, 인터럽트 처리기라는 프로그램으로 분기 → 입출력 실행한 프로그램 마저 실행
- ⇒ 입출력 작업이 사용자 프로그램의 명령어와 동시 실행
- 연산 완료
- 연산 성공, 실패를 나타내는 플래그 설정
인터럽트 처리
- 처리기로 인터럽트 신호 전달
- 인터럽트에 응답하기 전, 수행 중인 명령어 완료
- 처리기는 요청된 인터럽트가 있는지 검사 → 인터럽트를 발생시킨 장치로 수신 확인 전달
- 인터럽트 루틴으로 넘기기 전 수행 중이던 프로그램을 재기하기 위한 정보(문맥) 제어스택에 저장
- ex) 프로그램 상태 워드, 다음 명령어 위치, 프로그램 카운터 내용, 처리기 레지스터 내용 etc
- 인터럽트 처리 루틴의 진입 위치를 프로그램 카운터에 저장 → 인터럽트 처리 루틴 실행
- 인터럽트 처리기는 모든 레지스터의 내용을 스택에 저장
- 인터럽트 처리
- 처리 완료 → 저장된 레지스터 값 검색 → 레지스터에 다시 저장
- 문맥 정보를 통해 인터럽트 발생 이전으로 복원
중첩 인터럽트
인터럽트는 중첩되어 발생 가능
- 순차적 인터럽트 처리
- 하나의 인터럽트 처리 시 다른 인터럽트 요구 신호 무시 → 인터럽트 처리 루틴 완료 후 사용자 프로그램이 재개되기 전 인터럽트 발생했는지 검사
- 중첩된 인터럽트 처리
- 인터럽트 간 우선순위 정의 ⇒ 낮은 우선순위의 인터럽트는 높은 인터럽트에 의해 인터럽트 될 수 o
'이론 > 운영체제' 카테고리의 다른 글
[OS] 운영체제의 결함 종류 (0) | 2023.07.20 |
---|---|
[OS] 운영 체제의 주요 성과, 프로세스 (0) | 2023.07.19 |
[OS] 순차처리, 단순 일괄처리, 멀티프로그래밍 일괄처리 (0) | 2023.07.16 |
[OS] 운영체제의 기능 (0) | 2023.07.15 |
[OS] 메모리 계층 구조 (0) | 2023.07.06 |
댓글