OS 역활 : 유저에게 서비스 제공, Memory 랑 I/O Device 관리
OS 요소
- I/O
- Process
- Main Memory (휘발성 - 전기로 유지)
- System Bus (연결다리)
주 기억장치 - 보조 기억장치 ( ex 하드 디스크, 데이터 영구(?) 보관)
PC = Program counter : 다음에 수행할 명령어 주소 저장
IR = Instruction register : 현재 실행 중인 명령어 저장
MAR = Memory address register : 읽기와 쓰기 연산을 수행할 주 기억장치 주소 저장
MBR = Memory buffer register : 주 기억장치에서 읽어온 데이터 or 저장할 데이터 임시 저장
AC = Accumulator : 연산 결과 임시 저장
I/O AR = Input/Output address register
I/O BR = Input/Output Buffer register
System Bus의 역활 : Components 사이의 데이터 이동시키는 wire, protocol
CPU의 기본 동작
- 주기억장치는 입력장치에서 입력받은 데이터 또는 보조기억장치에 저장된 프로그램 읽어옴
- CPU는 프로그램을 실행하기 위해 주기억장치에 저장된 프로그램 명령어와 데이터를 읽어와 처리하고 결과를 다시 주기억장치에 저장
- 주기억장치는 처리 결과를 보조기억장치에 저장하거나 출력장치로 보냄
- 제어장치는 1~3 과정에서 명령어가 순서대로 실행되도록 각 장치를 제어
명령어 사이클 : 인출 - 실행 - 간접 - 인터럽트
인출(Fetch) 단계 : 명령어를 명령 레지스터(IR)를 통해 가져와 해독
- MAR <- PC : PC에 저장된 주소를 MAR에 전송
- 저장된 내용을 토대로 주기억장치의 해당 주소에서 명령어 인출
- 인출한 명령어를 MBR에 저장
- MBR <- M[MAR] : MAR이 지정하는 주소값을 MBR에 전송
- PC <- PC + 1 : 다음 명령 실행하기 위해 PC의 값 1증가
- IR <- MBR : 명령어의 OP-Code 부분을 IR에 불러옴
- I <- MBR : 명령어의 모드 비트를 플립플롭 I에 전송하여
- 0이면 Execute 단계
- 1이면 Indirect 단계 (간접 주소이기에 유효주소 찾으러 가는 것)
Indirect 단계
- MAR <- MBR : MBR에 있는 명령어의 주소 부분을 MAR에 전송
- MBR <- M[MAR] : MAR이 지정하는 주소값을 MBR에 전송
- 플립플롭에 값 전송하여 Execute 단계로 진입
인터럽트 단계
- MBR[AD] <- PC : PC의 복귀 주소를 MBR의 주소 부분으로 전송
- PC <- 0 : 복귀 주소를 저장할 위치를 지정
- MAR <- PC : PC가 가진 0번지 주소를 MAR에 전송
- PC <- PC+1 : 인터럽트를 처리하는 서브 루틴으로 이동하기 위해 인터럽트 벡터의 위치를 지정하기 위해 PC 위치 값을 1 증가
- M[MAR] <- MBR : MBR이 가진 다음 실행한 명령의 주소를 메모리의 MAR 부분에 저장
- IEN <- 0 : 인터럽트 단계 마칠 때까지 다른 인터럽트 발생 막기 위해 IEN에 0 전송
- 플립플롭에 값 전송하여 인출단계로 진입
Interrupt :
- I/O 장치들은 CPU 보다 보통 느림
- I/O를 기다리는 것이 아니라 할 일 하다가 입력(Interrupt) 오면 반응하는 방식
인터럽트가 사용하지 않는 경우 : 논리적으로 명확 / 느림
인터럽트 사용하는 경우 : 빠름 / 설계 복잡, 모든 경우 계산 못함
System Bus 의 역활 : Components 사이의 data 이동시키는 wire protocol, 즉 각 요소들간의 통신을 가능하게 해준다
H/W - 비싸지만 빠름
S/W - 싸지만 갈수록 복잡해짐
- 인터럽트 요청 검사
- 인터럽트 소스가 CPU에 신호 보냄 Execution stage 끝내고 신호 확인 후 interrupt stage 실행
- 인터럽트 stage
- Interrupt Enable( IE ) 플래그 0으로 (기존의 것 처리 전까지 다른 인터럽트 받지 않기 위해)
- interrupt acknowledge : CPU가 인터럽트 소스에 승인 신호 보냄
- 인터럽트 서비스 루틴 시작 주소 알아냄
- 루틴 실행 준비 (context switch) : context (인터럽트 후 복귀할 때 필요한 최소 정보= SR, PC) 를 stack에 저장
- 인터럽트 실행
- IE 플래그 1로 만듬
- 인터럽트 자신이 사용할 레지스터들은 스택에 저장
- 인터럽트 소스가 요청한 일 처리
- 스택에 저장했던 레지스터 복구
- 인터럽트 return
- SR, PC 복구됨, 실행 중지된 프로그램 다시 실행
- Programmed I/O
프로세서가 주기적으로 I/O 모듈 상태 체크 (지시가 끝날 때까지)
I/O 모듈은 요구받은 행동하고 I/O Status 레지스터에 적절한 비트 설정함으로서 CPU에 보고함
- Interrupt- Driven I/O
CPU가 계속 확인하는 것이 아니라 인터럽트 발생시 행동
CPU 낭비가 Programmed I/O 보단 덜함
but, 프로세서가 I/O transfer를 위해 작업해야함
캐시가 missed and flushed => 속도가 낮아짐
(캐시가 데이터 이동시키는데 사용되어 기존 데이터 날라감)
- Direct Memory Access(DMA)
Performed by 분리된 모듈 (시스템버스 소속)
프로세서가 데이터 읽고 쓰기할 때 DMA 모듈에 명령
데이터 블록 I/O Controller와 메모리 사이 운반 without 프로세서 (처음과 마지막에만 개입)
Programmed I/O, Interrupt Driven I/O 보다 효율적 why?
캐시가 날라가는 문제, 데이터 이동에 CPU가 관여하는 문제 모두 해결
- Symmetric Multiprocessors (SMP)
2개 이상의 프로세서
메인 메모리 공유, interconnected by Bus, I/O 장치 access 권한 가짐
모두 동일한 일 함, 단일 OS가 관리함 => 일을 더 효율적으로 한다
단일 운영 체제 인스턴스에 의해 제어되는 다중 프로세서 컴퓨터 하드웨어 및 소프트웨어 아키텍처
장점 :
- perfomance
- scaling
- availability (프로세스 하나 고장나도 동작 가능)
- incremental growth (프로세스 추가 확장 가능)
Secondary Memory
- External
- Nonvolatile
Principle of locality : 데이터의 접근이 한부분에 집중되는 현상
=> 활용하여 저렴한 비용으로 많은 고성능 메모리 사용
'미가공 필기(운영 체제)' 카테고리의 다른 글
OS2 (0) | 2022.02.17 |
---|
댓글