Computer Architecture

Seongho·2022년 3월 8일
0

운영체제

목록 보기
1/12
post-thumbnail

프로그램 단계

  • 하드웨어 : 프로세서(CPU), 메모리(RAM), I/O controllers(키보드, SSD, 마우스 등을 제어하는 컨트롤러)
  • 시스템 소프트웨어 : 컴파일러, OS(운영체제)
  • Application Software : High-Level 언어(자바, 파이썬, C...)로 만든 프로그램. 실제로 사용자가 다루는 프로그램
    *디바이스가 하는 총괄적인 일을 컨트롤 하는 프로세서가 CPU, 보조적인 동작을 컨트롤 하는 프로세서가 보조프로세서. 대체적으로 프로세서라 하면 CPU를 통칭하는 말임.

프로그램 Code의 단계

High-Level Language ->compiler-> 어셈블리어 ->어셈블러-> 기계어(Binary Code)

I/O System 종류

  1. User-Interface Device
  • Display, 키보드, 마우스, 등등
  1. Storage Device
  • HDD, SSD, CD, DVD, Flash메모리
  1. Network Adapter
  • LAN포트 - 네트워크를 이용하여 다른 컴퓨터와 통신하기 위한 I/O장치

컴퓨터의 연산

  • 2의 보수 체제 사용
  • IEEE Std 754 부동소수점 사용 (표현 방법은 시스템프로그래밍 강의자료 보기)

Processor

  1. Instruction Set
  • 컴퓨터의 명령어들의 집합. 각각의 컴퓨터들은 서로 다른 Instruction Set을 가지고 있다. 예를들면, 인텔 CPU와 AMD CPU가 다른 Instruction Set을 갖는다. 과거의 컴퓨터들은 명령어가 매우 간단했다. 현재 CPU가 많은 발전을 이루었지만, 호환성의 문제때문에 일부 명령어들은 아직도 간단한 상태로 존재한다.
  1. 프로그램이 메모리에 올라가기까지..

    ex) C로 만든 프로그램 파일(.c)이 컴파일러에 의해 어셈블리어로 된 오브젝트 파일(.o)로 변환되고 어셈블리는 어셈블리어로 된 오브젝트 파일(.o)을 기계어로 된 오브젝트 파일(.o)로 바꿔준다. 링커는 기계어로 된 오브젝트 파일(.o)들과 라이브러리가 담긴 오브젝트 파일들을 연결하여 실행파일(.exe)로 변환한다.

파이프라이닝 작동원리(Pipelining Analogy)

참고: https://cs.stanford.edu/people/eroberts/courses/soco/projects/risc/pipelining/index.html

파이프라이닝을 세탁기로 예를 들면, 세탁을 하는 한 사이클을 세탁기, 건조기, 옷 개기 라고 한다면, 첫번째 세탁물을 세탁기, 건조기에 돌리고 빨래를 개고, 두번째 세탁물을 세탁기, 건조기에 돌리고 빨래를 개고.. 이렇게 하면 세 단계중 두 단계가 작동하지 않으니, 비효율적이다. 이를 해결하기 위해 첫번째 빨래를 세탁기에 넣고 뺀 후 건조기에 넣어 돌아가는 동안 두번째 빨래를 세탁기에 넣고, 첫번째 빨래를 건조기에서 빼서 개는 동안 두번째 빨래를 건조기에 넣고 세번째 빨래를 세탁기에 넣고.. 이렇게 하면 시간을 절약할 수 있다. (Parallelism(병렬))

Hazards In Pipelining

참고: https://jesus-never-fail.tistory.com/13
Hazard : 특정한 이유로 다음 clock cycle에 다음 명령어가 실행되지 않는 상황
☞ 모든 Hazard는 waiting(stall)으로 해결된다.
1. Structure Hazard : 한정된 하드웨어 자원에 의한 문제
해결 -> CPU Core 수를 늘리는 등의 하드웨어 자원을 늘리는 방법을 통해 해결할 수 있다.
해결 -> 레지스터나 캐시 메모리와 같은 저장장소를 활용한다.
2. Data Hazard : 현재 명령에서 이전 명령어의 데이터에 접근하여 이전 명령어의 결과에 의존하는 문제(아직 명령어가 끝나지 않은 레지스터에 접근)
해결 -> Forwarding. 이전 명령어에서 계산이 완료되면, 레지스터에 저장되는 것을 기다리지 않고 계산된 결과를 끌어다 사용한다. datapath 수정이 필요.
해결 -> Load-Use. 명령어 종류에 따라 forwarding을 이용해 stall을 피할 수 없을 수도 있다. 그럴땐 그냥 1 stall 발생
해결 -> Code Scheduling. instruction의 순서를 바꾼다.
3. Control Hazard : 분기 명령어를 통해 명령어를 건너 뛰어 PC값이 변하고, 중간에 건너뛴 명령어를 실행하지 않는 문제
해결 -> Just stall. 그냥 기다린다.
해결 -> branch(분기할 때 branch가 갈라진다고 함.) prediction. 분기할지 안할지 예측

Locality

프로그램은 기억장치 내의 데이터를 균일하게 모두 접근하는 것이 아닌, 효율성을 극대화하기 위해 특정 부분을 집중적으로 접근한다.
1. Temporal locality (가장 최근 접근한 영역)
최근에 access한 주소가 다시 access될 확률이 높다. ex)반복문, Sub program, stack..
2. Spatial locality (가장 접근하기 가까운 영역)
access한 주소의 주변이 또 access될 확률이 높다. ex)배열

Locality를 통한 이점

Memory hierarchy(메모리 계층구조)를 이용할 수 있다. 모든 데이터를 플래시 메모리나 HDD/SSD에 저장해놓고 Locality가 큰(?) 부분을 DRAM에 복사하고(메인메모리), 더 Locality가 큰(?) 부분을 SRAM에 복사해와서 사용한다(캐시(cache) 메모리).

Memory Hierarchy

캐시 메모리를 먼저 확인하고, Miss(데이터 없으면)이면 lower level인 메인메모리를 확인하고 Miss이면 Disk를 확인한다. 여기서 Hit이면 그 데이터를 가져다 쓰고, Miss이면, 그냥 데이터 못찾은 것.

Virtual Memory

운영체제는 프로세스에서 CPU에 당장 수행해야 할 부분만을 메인메모리에 적재하고 그렇지 않은 부분은 디스크 스왑 영역에 두고 필요하면 교체하는 방식(Demading Paging)으로 메모리를 관리한다. 이렇게 디스크를 메모리의 연장 공간으로 사용하기 때문에 Virtual Memory가 가능하다. Virtual Memory는 프로세스마다 0부터 시작하는 주소 공간을 갖고 있고, 이중 일부는 메모리에 적재되어 있고, 나머지는 디스크 스왑 영역에 적재되어 있다. 이렇게 여러 프로그램이 각자의 Virtual Memory를 가지고 메모리를 나누어 사용한다. Virtual address를 Physical address로 transition 한다고 한다.

Page table


각 프로세스는 페이지 테이블을 갖고 있고, 페이지 테이블을 통해서 Physical address에 접근할 수 있다. 이때, 메인메모리에 없는 페이지를 접근하려 할 때, Valid==0이면 Page Fault라 한다. PAge Fault를 최대한 줄이는 것이 중요하다. Page table의 한 라인을 PTE(Page Table Entry)라 하는데, 여기에 physical page number가 있다.
Valid Bit가 0이어서 Page Fault가 발생하면 PTE는 Disk를 참조한다.

TLB

Translation Look-aside Buffer. Locality가 높은 가상주소-Physical주소 변환 정보를 갖고있는 캐시이다.

Ref. 충북대학교 조희승 교수 OS Course

profile
Record What I Learned

0개의 댓글