728x90
반응형
SMALL

컴퓨터 구조를 위해 

한빛 미디어의 혼자 공부하는 컴퓨터 구조 및 운영체제를 참고하였습니다.

도움이 많이 되었습니다.

유튜브 강의도 찾아보실 수 있어 아주 편리합니다.

감사합니다.

728x90
반응형
LIST
728x90
반응형
SMALL

#들어가며

어떻게 입출력장치가 레지스터를 통해 작동하는지를 알아보려고 합니다.

작은 컴퓨터를 하나 보여드립니다.

보이는 시계와 스위치와 LED 등 CPU를 제외하고는 전부 다 입출력 장치 입니다.

이 장치들이 모두 입출력을 하기 위해서는 각각의 레지스터가 있고 레지스터를 통해서 읽고/쓰기 기능이 작동될 수 있습니다.

#프로그래밍

프로그래밍을 통해서 이러한 레지스터들을 직접 읽고 씀으로써 작동시킬 수 있다.

위에 보이는 LED를 위한 미리 정해진 레지스터들이 있습니다. (장치의 이름은 ATmega 128 GPIO 입니다.)

예를 들어 DDRx에 x에 포트를 연결할 수 있습니다. DDRA 또는 DDRB 이러한 방식입니다.

DDRA에 값 1을 대입하면 LED등에 불빛이 들어올 것입니다.

DDRE에 값 0을 입력하면 스위치를 입력으로 사용할 수 있습니다.

PORTA에는 LED에 어떻게 불빛을 쏘고 싶은지를 정하게 됩니다. 출력하고자 하는 값을 쓰면 됩니다.

PINE은 스위치에 입력된 입력값을 레지스터에 저장된 값을 읽어들일 수 있게 됩니다.

#프로그래밍 방법

다음과 같이 C언어를 통해서 프로그래밍을 할 수 있습니다.

DDRA = ob11111111; 은 LED의 8개 모두를 출력으로 쓰겠습니다가 됩니다.

PORTA = ob11111111; 모든 LED에 불을 킬 수 있습니다.

빌드를 한 다음에 이 소스 코드를 직접적으로 판에다가 다운로드를 받아주면은 

다음과 같이 LED에 불빛이 들어옵니다.

위 소스와 같이 코드를 입력하고 빌드를 하고 판에 다운로드를 하면

스위치를 누르기 전 그리고

이렇게 됩니다.

특정 레지스터를 통해서 불빛을 조정하고

특정 인터럽트를 통해서 불빛을 켜기/끄기를 할 수 있습니다.

감사합니다.

 

728x90
반응형
LIST
728x90
반응형
SMALL

#들어가며

세 가지 입출력 방식 : 프로그램 입출력, 인터럽트 기반 입출력, DMA 입출력

#프로그램 입출력

프로그램 속 명령어로 입출력장치를 제어하는 방법

입출력 명령어로써 장치 컨트롤러와 상호작용

메모리에 저장된 정보를 하드 디스크에 백업

(= 하드 디스크에 새로운 정보 쓰기)

#프로그램 입출력 - 메모리 맵 입출력

#프로그램 입출력 - 고립형 입출력

#인터럽트 기반 입출력

인터럽트 복습

- (하드웨어) 인터럽트의 개념

- 플래그 레지스터 속 인터럽트 비트

- 인터럽트 요청 신호

- 인터럽트 서비스 루틴

순차적으로 인터럽트를 처리하는 방식

인터럽트 중에서도 우선 순위가 높은 인터럽트가 있다.

NMI = None Maskable Interupt

#DMA 입출력

프로그램 입출력, 인터럽트 기반 입출력의 공통점?

입출력장치와 메모리 간의 데이터 이동은 CPU가 주도하고 이동하는 데이터도 반드시 CPU를 거친다

가뜩이나 바쁜 CPU..

하드 디스크 백업과 같이 대용량 데이터를 이동한다면?

#DMA 입출력 과정

* 이 때 DMA 컨트롤러는 필요한 경우 메모리에 직접 접근

입출력 버스를 통해서 시스템 버스를 CPU와 함께 공동으로 사용하는 버스를 사용하지 않고도 입출력 버스를 사용하지 않음

#마무리하며

입출력 장치가 자체 RAM을 장착하거나, 자체 CPU를 장착한 경우도 있다.

 

728x90
반응형
LIST
728x90
반응형
SMALL

#들어가며

이번 장에서 언급하는 입출력 장치는 보조기억장치도 포함

#CPU - 입출력장치 정보 주고받기

입출력 장치는 앞서 학습한 CPU, 메모리보다 다루기가 더 까다롭습니다.

#장치 컨트롤러

#장치 컨트롤러의 역할

장치 컨트롤러가 CPU와 입출력장치 간의 통신중개 역할을 해줌으로써 일종의 번역가 역할을 수행합니다.

오류 검출은 입출력 장치에 문제가 있지는 않은지

데이터 버퍼링은 전송률이 높은 장치와 낮은 장치 사이에 주고받는 데이터를 버퍼라는 임시 저장 공간에 저장하여 전송률을 비슷하게 맞추는 방법

#장치 컨트롤러의 구조

상태 레지스터와 제어 레지스터는 하나의 레지스터(상태/제어 레지스터)로 사용되기도 함

주고 받는 데이터로는 데이터, 상태 그리고 제어가 있습니다.

상태와 제어 레지스터는 하나에 쓰이기도 합니다.

#장치 컨트롤러의 구조

- 데이터 레지스터

  - CPU와 입출력장치 사이에 주고받을 데이터가 담기는 레지스터 (버퍼)

  - RAM을 사용하기도 

- 상태 레지스터

  - 상태 정보 저장

    - 입출력 장치가 입출력 작업을 할 준비가 되었는지,

    - 입출력 작업이 완료되었는지,

    - 입출력장치에 오류는 없는지 등의 상태 정보

- 제어 레지스터

  - 입출력장치가 수행할 내용에 대한 제어 정보

#장치 드라이버

장치 컨트롤러의 동작을 감지하고 제어하는 프로그램

장치 컨트롤러가 입출력장치를 연결하기 위한 하드웨어적인 통로라면,

장치 드라이버는 입출력장치를 연결하기 위한 소프트웨어적인 통로

#장치 컨트롤러

#장치 드라이버

컴퓨터가 연결된 장치의 드라이버를 인식하고 실행할 수 있다면 컴퓨터 내부와 정보를 주고받을 수 있음

반대로 컴퓨터가 장치 드라이버를 인식하거나 실행할 수 없다면 그 장치는 컴퓨터 내부와 정보를 주고받을 수 없음

운영체제가 연결된 장치의 드라이버를 인식하고 실행할 수 있다면 컴퓨터 내부와 정보를 주고받을 수 있음

반대로 운영체제가 장치 드라이버를 인식하거나 실행할 수 없다면 그 장치는 컴퓨터 내부와 정보를 주고 받을 수 없음

 

728x90
반응형
LIST
728x90
반응형
SMALL

#들어가며

#RAID의 정의

#RAID 0

- 스트라입 (stripe) : 마치 줄무늬처럼 분산되어 저장된 데이터

- 스트라이핑 (striping) : 분산하여 저장하는 것

#RAID 1

#RAID 4

RAID 1보다 적은 하드 디스크로도 데이터를 안전하게 보관

패리티 비트는 오류 검출만 가능할 뿐 오류 복구는 불가능

한 하드 디스크에 패리티 비트가 몰려있으면 쓰기량이 3개의 하드 디스크에서 사용되기 때문에 아무래도 병목현상이 생길 수 밖에 없겠다.

#RAID 5

#RAID 6

오타: RAID 5보다 느림

 

728x90
반응형
LIST
728x90
반응형
SMALL

#들어가며

#하드 디스크

#하드 디스크 - 구성

#하드 디스크 - 저장 단위

데이터는 플래터에 저장이 되는데, 크게 트랙과 섹터 단위로 데이터가 저장됨

트랙은 전체 원이다. 이를 나누어서 섹터 단위로 나뉜다.

하나 이상의 섹터를 묶어 블록이라고 표현 하기도 함.

연속된 정보는 한 실린더에 기록

#하드 디스크 - 데이터 접근 과정

하드 디스크가 CPU에 의해서 저장된 데이터에 접근하는 시간은 크게 3가지로 나뉩니다. 

탐색 시간, 회전 지역, 전송 시간입니다.

나노초는 10의 -9승분의 초다.

#하드 디스크 - 직접 눈으로 살펴보자

'hard drive running'

'hard drive in slow motion'

Youtube에 이를 검색하면 하드 디스크가 동작하는 그 모습을 눈으로 확인해 볼 수 있다.

#플래시 메모리

#플래시 메모리의 종류

- NAND 플래시 메모리 - NAND 연산을 수행하는 회로 게이트를 사용하는 플레시 메모리, 주로 사용됨

- NOR 플래시 메모리 - NOR 연산을 수행하는 회로 게이트를 사용하는 플레시 메모리

#셀 (cell)

- 플래시 메모리에서 데이터를 저장하는 가장 작은 단위

- 이 셀이 모이고 모여 수 MB, GB, TB 저장 장치가 된다

한 셀에 저장할 수 있는 비트에 따라 수명과 가격 및 성능이 결정된다.

#SLC

#MLC

#TLC

읽기와 쓰기는 페이지 단위로 이루어짐

삭제는 (페이지보다 큰) 블록 단위로 이루어짐

플래시 메모리는 하드 디스크와 달리 덮어쓰기가 불가능

A만 A'로 수정한다면

 

728x90
반응형
LIST
728x90
반응형
SMALL

#들어가며

#저장 장치 계층 구조

1. CPU와 가까운 저장 장치는 빠르고, 멀리 있는 저장 장치는 느리다.

2. 속도가 빠른 저장 장치는 저장 용량이 작고, 가격이 비싸다.

레지스터 vs 메모리(RAM) vs USB 메모리

낮은 가격대의 대용량 저장 장치를 원한다면 느린 속도는 감수해야 하고, 빠른 속도의 저장 장치를 원한다면 작은 용량과 비싼 가격은 감수해야

저장 장치들은 'CPU에 얼마나 가까운가'를 기준으로 계층적으로 나타낼 수 있음

#캐시 메모리

- CPU와 메모리 사이에 위치한, 레지스터보다 용량이 크고 메모리보다 빠른 SRAM 기반의 저장 장치

- CPU의 연산 속도와 메모리 접근 속도의 차이를 조금이나마 줄이기 위해 탄생

- "CPU가 매번 메모리에 왔다 갔다 하는 건 시간이 오래 걸리니, 메모리에서 CPU가 사용할 일부 데이터를 미리 캐시 메모리로 가지고 와서 쓰자"

#참조 지역성의 원리

CPU가 자주 사용할 법한 내용을 예측하여 저장

 

 

 

728x90
반응형
LIST
728x90
반응형
SMALL

#들어가며

논리 주소와 물리 주소로 주소 공간을 나눈 이유?

논리 주소를 물리 주소로 변환하는 방법?

#물리 주소와 논리 주소

CPU와 실행 중인 프로그램은 현재 메모리 몇 번지에 무엇이 저장되어 있는지 다 알고 있을까요?

NO

메모리에 저장된 값들은 시시각각 변하기 때문

- 새롭게 실행되는 프로그램은 새롭게 메모리에 적재

- 실행이 끝난 프로그램은 메모리에서 삭제

- 같은 프로그램을 실행하더라도 실행할 때마다 적재되는 주소는 달라짐

- 물리 주소

  - 메모리 입장에서 바라본 주소

  - 말 그대로 정보가 실제로 저장된 하드웨어상의 주소

- 논리 주소

  - CPU와 실행 중인 프로그램 입장에서 바라본 주소

  - 실행 중인 프로그램 각각에게 부여된 0번지부터 시작하는 주소

#물리 주소와 논리 주소의 변환

그렇다면 물리 주소와 논리 주소 간의 변환은 어떻게 이루어질까?

물리 주소에는 겹치는 주소가 없다. CPU와 메모리가 상호작용을 하려면 논리 주소를 물리 주소로 변환하는 과정이 필요하다.

#베이스 레지스터

프로그램의 가장 작은 물리 주소(프로그램의 첫 물리 주소)를 저장하는 셈, 논리 주소와 물리 주소의 거리인 셈

#논리 주소

프로그램의 시작점으로부터 떨어진 거리인 셈

#메모리 보호

만일 메모리에 저장되는 주소가 겹쳐도 괜찮을까?

NO

#한계 레지스터

- 프로그램의 영역을 침범할 수 있는 명령어의 실행을 막음

- 베이스 레지스터가 실행 중인 프로그램의 가장 작은 물리 주소를 저장한다면, 한계 레지스터는 논리 주소의 최대 크기를 저장

- 베이스 레지스터 값 <= 프로그램의 물리 주소 범위 < 베이스 레지스터 + 한계 레지스터 값

 

728x90
반응형
LIST

+ Recent posts