1) CPU와 메모리
2) 입출력 장치
3) 저장장치
4) 메인보드
산술논리 연산장치
:데이터 덧셈, 뺄셈 등 산술연산/ and, or 같은 논리연산을 수행
제어장치
: cpu에서 작업을 지시하는 부분 ( "이거 가져가", "여기로 가져와")
레지스터
: CPU내에 데이터를 임시로 보관하는 곳
데이터 레지스터 (DR)
: 메모리에서 가져온 데이터를 임시로 보관할 때 사용
⇒cpu에 있는 대부분의 레지스터가 DR, 따라서 일반레지스터라고도 함
주소 레지스터 (AR)
:메모리의 주소가 저장된 레지스터
⇒ 특별한 용도로 사용되는 레지스터
: 사용자가 임의로 변경할 수 없다. (사용자 불가시 레지스터)
명령어 레지스터(IR - instruction register)
:현재 실행중인 명령어 저장
메모리 주소 레지스터(MAR)
:메모리를 가져오거나 보낼 때 주소를 지정하기 위해 사용
(다시 제자리로 보내야하기 때문에 필요)
메모리 버퍼 레지스터 (MBR)
:데이터를 임시저장, MAR과 항상 함께 동작
제어버스 (양방향)
: 다음에 어떤 작업을 할지 지시하는 제어신호가 오고감
⇒ 제어버스는 cpu와 제어장치와 연결
주소버스 (단방향)
: 메모리의 데이터를 일거나 쓸 때 어느 위치에서 작업할 것인지 알려주는 위치정보가 오고간다.
⇒주소버스는 "메모리 주소 레지스터"와 연결
데이터 버스 (양방향)
: 데이터가 데이터 버스에 실려이동 (명령어 + 데이터)
⇒메모리 버퍼 레지스터에 연결
OS가 구동되는 메모리와 일반 사용자가 사용하는 메모리가 서로 침범되지 않기 위해, 혹은 각각의 메모리 범위를 지정하여서 보호하기 위해
경계 레지스터와, 한계 레지스터를 사용한다.
인터럽트
: 두 레지스터의 값을 벗어나면 인터럽트가 발생하고, 인터럽트가 발행하면 모든 작업을 중단한다.(OS에서 해당 프로그램 강제 종료)
부트 스트랩
: 운영체제 또한 프로그램이기 때문에 메모리위에 올라와야 실행이 된다.
이렇게 운영체제를 메모리위에 올리는 과정을 부팅 이라하며,
이러한 일을 하는 프로그램을 부트 스트랩이라고 한다.
가. cpu는 메모리에 저근해야 할 때 캐시를 먼저 방문한다.
나. 캐시에서 원하는 데이터를 찾았다면, 캐시 히트라 한다.
다. 찾지 못하였다면 메모리로 가서 데이터를 찾는다 (캐시 미스)
비싸고 속도가 빠른 저장장치를 cpu 가까운곳에 배치하여 성능을 향상시키는 구조이다.
보통 아래의 순서와 같다.
"레지스터" > "캐시" > "메모리" > "저장장치"
가. 인터럽트란
즉, 인터럽트란 입출력 관리자가 CPU에게 보내는 완료신호 이다.
나. 인터럽트 동작과정
1) cpu가 입출력 관리자에게 입출력 명령 보냄
2) 입출력 관리자는, 데이터를 메모리에 가져다놓고나서 저장장치에 옮김
3) 데이터 전송 완료시, 완료신호를 CPU에 보냄(인터럽트)
4) CPU가 신호를 받으면 하던일을 중단하고 데이터를 처리
다. 하드웨어 인터럽트
라. 소프트웨어 인터럽트
소프트웨어가 발생시키는 인터럽트이다. 소프트웨어(사용자 프로그램)가 스스로 인터럽트 라인을 세팅한다.
종류: 예외 상황, system call
인터럽트를 발생시키기 위해 하드웨어/소프트웨어는 cpu내에 있는 인터럽트 라인을 세팅하여 인터럽트를 발생시킨다.
cpu는 매번 명령을 수행하기 전에 인터럽트라인이 세팅되어있는지를 검사한다.
병렬처리란, 동시에 여러개의 명령을 처리하는 것이다. (듀얼 코어, 쿼드 코어)
하나의 코어(cpu)에 여래개의 스레드를 이용하는 방식이을 파이프라인이라 한다.
스레드 : CPU가 처리할 수 있는 작업의 단위
상호 의존성이 없어야 한다.
:각 명령이 서로 독립적이어야 한다.
각 단걔의 시간이 거의 일정해야 한다.
: 그렇지 않다면 뒤에 오는 프로세스들이 기다려야하거나, 시간이 오래걸리는 단계에서 "병목 현상" 이 일어날 수 있다.
전체 작업시간(명령어)를 몇 단계로 나눌지 고려해야한다.
① 데이터 위험(Data Hazard)
데이터의 의존성 때문에 발생하는 문제
데이터 A를 필요로 하는 두 번째 명령어는 앞의 명령어가 끝날 때까지 동시에 실행되어서는 안 됨
데이터 위험은 파이프라인의 명령어 단계를 지연하여 해결
데이터 위험의 예
[A = C + D]
[E = A * 2]
② 제어 위험(Control Hazard)
프로그램 카운터 값을 갑자기 변화시켜 발생하는 위험
첫 명령어를 실행하고 보니 goto 문이어서 다음 문장이 아니라 다른 문장으로 이동하게 되면 현재 동시에 처리되고 있는 명령어들이 쓸모없어짐
제어 위험은 분기 예측이나 분기 지연 방법으로 해결
제어 위험의 예
[Goto line 10]
[E = A * 2]
③ 구조 위험(Structural Hazard)
서로 다른 명령어가 같은 자원에 접근하려 할 때 발생하는 문제
명령어 A가 레지스터 RX를 사용하고 있는데 병렬 처리되는 명령어 B도 레지스터 RX를 사용해야 한다면 서로 충돌
구조 위험은 해결하기 어렵다고 알려져 있음
구조 위험의 예
[ADD RX + 3]
[Move RX]