반응형

우선, 엔디언이란  컴퓨터 메모리 같은 1차원의 공간에 여러 개의 연속된 대상을 배열하는 방법이다.(출처-위키백과)

 

그 중에서 바이트 순서(바이트 오더)를 설명하는 용어를 "빅엔디언", "리틀엔디언"으로 나눌 수 있다.

 

엔디언(Big-Endian)은 바이트 열에서 가장 값이 먼저 저장되고,

리틀엔디언(Little-Endian)은 바이트 열에서 가장 작은 값이 먼저 저장된다.

 

위의 그림과 같이 빅엔디언 형식은 상위 바이트의 값(바이트 열에서 가장 큰 값)이 메모리의 시작주소에 먼저 저장되고,

리틀엔디언 형식은 하위 바이트의 값(바이트 열에서 가장 작은 값)이 메모리의 시작주소에 먼저 저장된다.

 

우리가 자주 사용하는 인텔(Intel)계열 프로세스는 리틀엔디언 형식으로 데이터를 저장하고 있으나, CPU간 데이터 전송을 위해 데이터를 전송할 경우에는 빅엔디언 형식으로 변환하여 전송한다.

 


01111011 10010101

 

예를 들어 위와 같이 2Byte, 즉 16bit의 값이 있다고 가정했을 때,

 

빅엔디안 순서로 읽으면 0x7B95 이고, 리틀엔디안 순서로 읽으면 0x957B가 되는 거죠.

반응형
반응형

#1. Programmed I/O

- 원하는 I/O가 완료되었는지 여부를 검사하기 위해 CPU가 상태 플래그를 계속 조사하여 I/O가 완료된 경우 MDR(MBR)과 AC 사이의 자료 전송을 CPU가 직접 처리하는 방식

- I/O 작업 시 CPU는 계속 I/O 작업에 관여해야 하기 때문에 다른 작업을 할 수 없음

- 입력의 완료를 알리기 위해 인터럽트가 필요 없는 대신 CPU가 지속적으로 입출력 완료 여부를 확인해야함



#2. Interrupt I/O

- 데이터를 전송할 준비가 되면 I/O 인터페이스가 컴퓨터에게 알려 입출력이 이루어짐

- I/O 인터페이스는 CPU에게 인터럽트 신호를 보내 입출력이 있음을 알림

- CPU가 지속적으로 Flag를 검사하지 않아도 되기 때문에 Pragrammed I/O보다 효율적

- CPU가 입력을 지시한 후 워드의 입력이 이루어지는 사이 다른 작업(타 프로그램 실행)이 이루어짐



#3. DMA(Directed Memory Access)

- 입출력 기기들이 CPU의 레지스터를 거치지 않고 직접 메모리를 엑세스하여 입출력 데이터 전송

- CPU는 I/O에 필요한 정보를 DMA 제어기에 알려 I/O 동작을 개시시킨 후, 다른 작업을 수행

- 입출력 자료 전송 시 CPU를 거치지 않기 때문에 CPU의 부담 없이 빠른 데이터 전송 가능

- DMA의 우선순위는 메노리 참조의 경우 중앙처리장치보다 상대적으로 높음

- 인터럽트 신호를 발생시켜 CPU에게 입출력 종료를 알림

- Cycle Steal 방식을 이용하여 데이터 전송

  (CPU와 DMA 방식의 입출력 장치가 공통된 버스를 통해 주기억장치에 연결된 경우, 우선순위가 높은 입출력 채널이 접근 사이클을 먼저 사용하여 주기억장치에 접근하는 것 >> 작업 효율성 UP, CPU의 양보)

- CPU가 DMA 제어기로 보내는 정보

a. I/O 장치의 주소

b. 데이터가 있는 주기억장치의 시작주소

c. DMA를 시작시키는 명령

d. 입출력하고자 하는 자료의 양

e. 입력 또는 출력을 결정하는 명령


- DMA 구성요소

a. 인터페이스 회로 : CPU와 입출력장치 통신 담당

b. 주소 레지스터 및 주소라인 : 기억장치의 위치 지정을 위한 번지 기억 및 전송

c. 워드 카운트 레지스터 : 전송되어야 할 워드의 수 기억

d. 제어 레지스터 : 전송방식 결정

e. 데이터 레지스터 : 전송에 사용할 자료나 주소를 임시로 기억하는 버퍼 역할


- DMA 전송 절차

1. CPU가 DMA 제어기에 명령을 내림

2. DMA제어기가 CPU에게 버스 사용 요구 (= Bus Request)

3. CPU가 DMA 제어기에게 버스 사용 허가 (= Bus Grant)

4. DMA 제어기가 주기억장치에서 데이터를 읽어 디스크로 전송 (= Data Transfer)

5. 2~4번을 반복하다가 데이터 전송이 완료되면 인터럽트 신호 보냄



#4. Channel I/O

- I/O를 위한 특별 명령어를 I/O 프로세스에게 수행토록 하여 CPU 관여없이 주기억장치와 입출력장치 사이에서 입출력을 제어하는 입출력 전용 프로세서(IOP)

- 채널을 DMA 방법으로 입출력 수행 (= DMA 확장 개념)

- 채널 제어기는 채널 명령어로 작성된 채널 프로그램을 해독하고 실행하여 입출력 동작 처리

- CPU로부터 입출력 전송을 위한 명령어를 받으면 CPU와는 독립적으로 동작하여 입출력 완료

- 채널을 주기억장치에 기억되어 있는 채널 프로그램의 수행과 자료 전송을 위해 주기억장치 직접 접근

- I/O 장치는 제어장치를 통해 채널과 연결

- I/O 채널을 CPU의 I/O명령을 수행하지 않고 I/O 채널 내의 특수목적 명령을 수행함

- CPU와 인터럽트로 통신

- 채널의 종류

a. Selector Channel : 고속 입출력장치(자기디스크, 자기테이프, 자기드럼) 1개와 입출력하기위해 사용

b. Multiplexer Channel : 저속 입출력장치(카드리더, 프린터) 여러개를 동시에 제어하는 채널

c. Block Multiplexer Channel : 동식에 여러 개의 고속 입출력 장치 제어



#5. Isolated I/O

- 입출력 장치들이 입출력 버스를 통해 CPU와 연결되어 있는 경우

- 메모리는 따로 메모리 버스를 통해 연결

- 입출력은 입출력을 담당하는 명령어를 통해 실행/입출력버스를 통해 해당 장치의 지정, 데이터, 입출력 구분 제어값 전달

- 입출력 명령어가 명령어 집합에 추가되어 제어로직 복잡

- 입출력 버스를 장착하는데 추가비용



#6. Memory-mapped I/O

- CPU가 입출력 장치를 엑세스할 때, 입출력과 메모리의 주소공간을 공동 데이터버스, 주소버스, 제어버스 등으로 구분하지 않고 하나의 메모리 공간에 취급하여 배치하는 방식

- 입출력을 위한 명령어를 따로 사용않고, 메모리에 대한 명령어를 활용하여 입출력 수행

- 입출력 장치들은 각각 메모리의 한 번지를 할당받아 입출력 수행 > 메모리를 동적으로 사용 불가


반응형
반응형

1. 소프트웨어적인 방법 = 폴링(Polling)


  • 인터럽트 발생 시 높은 우선순위의 인터럽트 자원부터 인터럽트 요청 플래그를 검사하여, 우선순위가 가장 높은 인터럽트 자원을 찾아내 루틴을 수행하는 방식
  • 많은 인터럽트가 있을 경우, 모두 조사하는 데에 시간이 걸려 처리 속도가 느림
  • 회로가 간단함
  • 융통성이 있음
  • 별도의 하드웨어가 필요없어 경제적


2. 하드웨어적인 방법 = Vectored Interrupt


  • CPU와 인터럽트를 요청할 수 있는 장치 사이에 장치번호에 해당하는 버스를 직렬이나 병력로 연결하여 요청 장치의 번호를 CPU에게 알리는 방식
  • 인터럽트 벡터란, 인터럽트를 발생한 장치가 프로세서에게 분기할 곳에 대한 정보를 제공하는 것
  • 장치 판별을 위한 별도의 프로그램 루틴이 없어 응답 속도가 빠름
  • 회로가 복잡함
  • 융통성이 없음
  • 추가적인 하드웨어가 필요하므로 비경제적
1) 직렬(Serial) 우선순위 부여 방식 = 데이지체인(Daisy-chain)
- 인터럽트가 발행하는 모든 장치를 한 개의 회선에 직렬로 연결
- 우선순위가 높은 장치를 선두에 위치시키고 나머지를 우선순위에 따라 차례로 연결
- 호스트에 가까운 쪽에 높은 우선권을 두는 경우가 많음 

2) 병렬(Parallel) 우선순위 부여 방식
- 인터럽트가 발생하는 각 장치를 개별적인 회선으로 연결
- Mask Register의 비트 위치에 따라 우선순위 결정
- Mask Register는 우선순위가 높은 것이 서비스를 받고 있을 때, 우선순위 낮은 것을 비활성화 할 수 있음
- 우선순위가 높은 인터럽트는 낮은 인터럽트가 처리되는 중에도 우선적으로 처리됨

3. 요약정리

 

H/W

S/W

속도

빠름

느림

회로

복잡

간단

융통성

없음

있음

경제적

비경제적

경제적





반응형
반응형

1. 인터럽트(Interrupt) 란?


CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외 상황이 발생하여 처리가 필요한 경우 CPU에게 알려 처리할 수 있도록 하는 것.


CPU의 모든 상태는 PSW에서 유지되는데 인터럽트를 알리는 5bit가 있고, 5가지 인터럽트 서비스 루틴(ISP)가 운영체제 일부에 존재한다. 인터럽트 처리 중 다른 인터럽트 발생 시, 우선순위에 의해 인터럽트 처리한다.


2. 인터럽트(Interrupt) 처리 순서


  1. 현재 진행 중인 기계어 코드를 완료한다.
  2. CPU의 특수 레지스터 중 하이로 인터럽트 마스크 비트를 보고 마스크되면 인터럽트를 무시한다.
  3. 인터럽트 벡터를 읽는다.
  4. ISR 주소 값을 얻는다.
  5. ISR로 점프한다. 이 때, PC(Program Counter)값을 자동 저장된다.
  6. 현재 진행중인 프로그램의 레지스터를 저장한다.
  7. 해당 코드를 실행한다.
  8. 해당 코드를 다 처리하면, 저장한 레지스터를 복원한다.
  9. ISR 끝에 IRET 명령어에 의해 인터럽트가 해제된다.
  10. IRET 명령어가 실행되면, 저장한 PC 값을 복원하여 이전 실행 위치로 이동한다


3. 인터럽트(Interrupt) 종류


1. 하드웨어 인터럽트(Hardware Interrupt)

  • 기계검사 인터럽트 : 프로그램을 실행하는 도중 갑작스런 정전이나 컴퓨터 자체 내에서 기계적 문제가 발생한 경우
  • 외부 인터럽트 : 오퍼레이터나 타이머에 의해 의도적으로 프로그램이 중단된 경우
  • 입출력 인터럽트 : 입출력의 종료나 입출력의 오류에 의해 CPU의 기능이 요청되는 경우
  • 프로그램 검사 인터럽트 : 프로그램 실행 중 보호된 기억공간 내에 접근하거나 불법적인 명령 수행과 같은 프로그램 문제가 발생한 경우

2. 소프트웨어 인터럽트(Software Interrupt)
  • 존재하지 않는 메모리 주소에 접근하는 경우
  • 나눗셈 연산의 경우 0으로 나누는 등의 논리적 오류가 발생하는 경우

4. 인터럽트(Interrupt) 우선 순위

전원 공급 이상 → CPU의 기계적 오류 → 외부 신호에 의한 인터럽트 → 입출력 전송 요청 및 전송 완료/전송 오류 → 프로그램 검사 인터럽트 → 슈퍼바이저 호출(SVC 인터럽트)

5. 참조 문서



반응형
반응형

#1. 폰노이만 아키텍처(Von Neumann)

  • 메모리에 명령어와 데이터를 함께 저장하며, 데이터는 메모리에서 읽기/쓰기가 가능하나, 명령어는 메모리에서 읽기만 가능
  • 명령어와 데이터 모두 동일한 메모리 버스를 통해 명령 수행(=메모리 공유)
  • 프로그램 내장방식
  • CPU는 한번에 하나의 명령어만 수행 가능(비효율적)
  • 명령어와 데이터 모두 주기억장치에 저장하기 때문에 병목현상 발생


#2. 하버드 아키텍처(Harvard)
  • 명령어 메모리에서 명령어를 가져와 분석/실행하고 참조/결과에 대한 저장은 데이터 메모리에 별도로 하는 구조 
  • CPU는 명령어와 데이터를 동시에 사용할 수 있음
  • 명령어 영역마다 주소버스, 데이터 버스, 제어 버스가 따로 존재
  • 현재 명령 실행 후 바로 다음 명령을 가져올 수 있어 속도 우수
  • 버스 시스템이 복잡해 설계가 복잡
  • 상대적으로 적은 명령어 수와 주소모드
  • 메모리 참조는 LOAD와 STORE로 제한
  • 고정된 명령어 길이 → 디코딩이 간단
  • 단일 사이클의 명령어 실행
  • 명령어 구조 상 RISC 구조
  • 메모리를 분리하여 파이프라인 사용 시 최적


반응형
반응형

#1. CISC(Complex Instruction Set Computer)

  • 복잡한 명령어 집합을 가진 CPU 아키텍쳐
  • 복잡한 하드웨어 회로
  • 많은 수의 명령어와 주소모드가 존재하나 실제로 쓰이는 명령어는 한정
  • 실행 성능 개선(파이프라인 등..) 방법 적용이 어려움
  • 대부분의 명령어는 직접 메모리 접근이 가능
  • 풍부한 어드레싱 기능 → 명령의 직교성이 뛰어남


#2. RISC(Reduced Instruction Set Computer)
  • CPU 명령어 개수를 줄여 간단한 하드웨어 회로
  • SPARC, MIPS 등의 아키텍처에서 사용
  • 복잡한 연산 → 단순한 여러 개의 명령어로 처리 가능
  • 프로세서 레지스터 뱅크 & 캐시 존재 → 시스템 수행속도 향상
  • 메모리와 CPU 사이 데이터 전송 시 LOAD와 STORE 명령만으로 한정
  • 명령어 형식은 모두 같은 길이
  • 어드레싱 모드의 수는 제한

 

 CISC

RISC 

 주요 특징

 복합명령어 / 하드웨어 복잡

 고정 명령어(32bit) / 하드웨어 간단

 CPU 명령

 명령어 갯수 많음 → 실행 사이클(속도) 다양

명령어 길이 고정 → 실행 사이클 동일 

 회로 구성

복잡 

단순 

 메모리 사용

 효율

비효율 

 프로그램 코드사이즈

 small(130~140)

large(160~180) 

 프로그램 측면

명령어 적게 사용 

 상대적 많은 명령어

 컴파일러

 복잡

단순 


※표는 
블로거 bitnang님의 자료를 참고하였습니다. >> https://blog.naver.com/bitnang/220692059829
문제가 된다면 삭제하겠습니다.


반응형
반응형

#1. PATA(Paralled ATA) = IDE = EIDE(Enhanced IDE)

  • 초기에 많이 사용됨. 지금은 거의 볼 수 없음.
  • 데이터 병렬 전송
  • PIO(Programmed Input/Output) 전송방식
  • 3.3MB/s ~ 16.7MB/s 속도 지원(매우 느림)


#2. SATA(Serial ATA)

  • PATA에서 진화된 케이스. 현재 주로 사용됨.
  • SATA1(~150MB/s) / SATA2(~300MB/s) / SATA3(~600MB/s)
  • 데이터 직렬 전송(높은 클록 주파수로 고속 전송을 위함)


#3. SCSI(Small Computer System Interface)

  • PATA의 데이터 안정성과 전송 속도를 향상시키기 위해 개발됨
  • 고성능+안전성
  • 데이터 병렬 전송
  • 고가의 제품 → 서버/워크스테이션 용으로 사용됨


#4. SAS(Serial Attaced SCSI)
  • 데이터 직렬 전송(전송속도와 안정성 대폭 증가)
  • HDD보다 좋은 성능
  • 고가의 제품 서버/워크스테이션 용으로 사용됨(별도의 SAS 컨트롤러 필요)
  • Point to Point
  • SATA와 호환되어 SATA 제품을 SAS컨트롤러에 연결하여 사용할 수 있지만, SAS제품은 SATA 포트에 연결할 수 없음.


반응형

+ Recent posts

반응형
반응형