프로세서는 메모리에 저장된 인스트럭션을 읽고 해석한다.

ORCASUIT·2023년 10월 22일
0

프로세서(또는 CPU, Central Processing Unit)는 컴퓨터의 "두뇌" 로 생각할 수 있으며, 다양한 연산과 명령을 처리함. 프로세서가 하는 일 중 중 하나는 메모리에서 인스트럭션(명령어)을 가져와서 그것을 해석하고 실행하는 것임


버스

시스템 내를 관통하는 전기적 배선군을 버스라고 하며 컴포너트간의 바이트 정보를 전송.
버스는 일반저긍로 워드라고 하는 고정 크기의 바이트 단위로 데이터를 전송하도록 설계됨


입출력 장치

시스템과 외부세계와의 연결 담당. 각 입출력 장치는 입출력 버스와 컨트롤러나 어댑터를 통해 연결됨 이 두장치의 차이는 패키징에 있음. 컨트롤러는 디바이스 자체가 칩셋이거나 시스템의 인쇄기판에 장착 됨. 이들의 각각의 목적은 입출력 버스와 입출력 장치들 간에 정보를 주고 받도록 함.


메인 메모리

물리적으로 메모리는 DRAM 칩들로 구성되며, 논리적으로 메모리는 '연속적인 바이트들의 배열, 각각 0부터 시작해서 고유의 주소(배열의 인덱스)를 가지고 있다.' 일반적으로 한 개의 프로그램을 구성하는 각 기계어 인스트럭션은 다양한 바이트 크기를 가짐. 예를들어 x86-64 컴퓨터에서 short 타입의 데이터는 2바이트를, int, float은 4바이트 long과 double은 8바이트를 필요함


프로세서

메인 메모리에 저장된 인스트럭션을 해독하는 엔진임. 프로세서의 중심에는 워드 크기의 저장 장치인 프로그램 카운터가 있고 어느 한 순간 PC는 메인 메모리의 기계어 인스트럭션을 가리킴.

프로그램 카운터

프로그램 카운터는 워드 크기의 저장 장치로, 어떤 한 순간에는 메인 메모리의 특정 기계어 인스트럭션의 주소를 가리킴. 즉, CPU가 다음에 실행해야 할 인스트럭션의 위치를 알려주는 역할을 함.

인스트럭션의 수행과정

  1. 인스트럭션 Fetch(가져오기): 프로그램 카운터가 가리키는 메모리 주소에서 기계어 인스트럭션을 가져옴.
  2. 인스트럭션 Decode(디코딩): 가져온 인스트럭션을 해독하여 어떤 연산을 해야 할지, 어떤 데이터에 연산을 해야할지 등을 알아냄
  3. Execute(실행) : 디코딩 된 인스트럭션에 따라 실제 연상을 수행함. 이 때 다른 레지스터나 메모리, ALU(Arithmetic Logic Unit) 등이 활용 될 수 있음.
  4. 결과 저장 : 연산 결과를 레지스터나 메모리에 저장함.
  5. 프로그램 카운터 갱신 : 다음 인스트럭션의 주소로 프로그램 카운터를 갱신함

linux> ./hello hello, world linux>

쉘은 커맨드라인 인터프리터로 프롬프트를 출력하고 그 명령을 입력받아 실행함.

시작

├─> 사용자 입력 대기
│ │
│ ├─> 키보드에서 명령 읽기
│ │
│ └─> 명령 파싱

├─> 명령 유효성 검사
│ │
│ ├─> 유효하면 진행
│ │
│ └─> 유효하지 않으면 다시 입력 요청

├─> 실행파일 로드
│ │
│ ├─> 디스크에서 실행파일 가져오기
│ │
│ ├─> 메인 메모리로 로드
│ │
│ └─> 프로그램 카운터 (PC) 초기화

├─> 프로그램 실행
│ │
│ ├─> 인스트럭션 가져오기
│ │
│ ├─> 인스트럭션 디코딩
│ │
│ └─> 인스트럭션 실행

├─> 출력 작성
│ │
│ ├─> 메모리에서 출력 문자열 위치 찾기
│ │
│ └─> 화면에 기록

└─> 프로그램 종료

0개의 댓글