2019/09/26 4

컴퓨터 시스템에서의 정보 이동

컴퓨터 시스템은 정보의 이동에 많은 시간을 소비 그러므로 컴퓨터 시스템에서 이들 이동(복사) 과정을 빠르게 처리하는 것이 중요하다. 레지스터와 메모리 - 프로세서의 레지스터는 작은 용량(수백 바이트)를 저장하지만 메인 메모리보다 100배 이상 빠름 - 메인 메모리는 많은 용량(GB급)을 저장하지만 느림 - 프로세서와 메모리 간의 속도 격차는 지속적으로 증가 프로세서-메모리 간의 격차에 대응하기 위해 작고 빠른 캐시메모리를 고안하여 프로세서가 단기간에 사용할 가능성이 높은 정보를 저장 프로그램이 특정 영역의 코드와 데이터를 참조하는 경향인 지역성을 활용하여 메모리 계층 구조를 설계 - 자주 참조할 가능성이 높은 데이터나 코드를 작고 빠른 저장장치(캐시)에 저장하여 접근

컴퓨터 시스템 하드웨어 구성(p.26쪽 그림과 함께 참고)

1. 버스 - 하드웨어 구성 요소들 간의 정보를 전달하는 배선 - 일반적으로 워드(word) 단위라는 고정된 크기의 바이트들 단위로 전송 2. 입출력 장치 - 컴퓨터 시스템과 외부 장치와의 연결을 담당 - 키보드, 디스플레이, 디스크 드라이브 등과 연결 - 입출력 장치는 입출력 버스, 컨트롤러(controller), 어댑터(adaptor)등을 통해 연결 cf.디스크 드라이브란? 디스크에 자료를 기록하고, 기록된 자료를 읽어들이는 장치이다. 디스크 기억장치(disk storage)라고도 한다. 하드 디스크, 플로피 디스크를 예로 들 수 있다. 3. 메인 메모리(Main Memory) - 실행되는 프로그램의 데이터와 프로그램이 저장 - 물리적으로 DRAM 칩으로 구성되고, 논리적으로는 연속된 바이트의 배열로..

컴파일 시스템 동작 이해

프로그램 성능 최적화하기 - 성능이 최적화된 효율적인 프로그램 작성을 위해 기계어 수준 코드에 대한 기본적인 이해 필요 링크 에러 이해하기 - 대규모 소프트웨어 시스템 빌드 시 발생하는 링커의 동작과 관련된 프로그래밍 에러 이해 보안 약점 피하기 - 안전한 프로그래밍을 위해 스택에 데이터와 제어 정보가 저장되는 방식의 이해가 필요

컴파일 시스템(Compile System)

전처리(preprocess)단계 - 전처리기(cpp)는 소스 C 프로그램의 #지시어(directive)에 따라 처리 - hello.c의 #include 지시어는 전처리기에게 시스템 헤더파일 stdio.h의 삽입을 지시 - 삽입된 처리 결과는 hello.i로 생성 컴파일(compile) 단계 - 컴파일러(cc1)는 hello.i를 어셈블리어 프로그램으로 변환하여 hello.s 를 생성 - 아래에서 각 줄이 한 개의 저수준 어셈블리 명령어를 텍스트 형태로 표시 어셈블리(assembly) 단계 - 어셈블러(as)가 어셈블리 명령어를 기계어 명령어(코드)로 변환 - 메모리에 재배치 가능한 프로그램(relocatable program) 형태의 hello.o 의 목적 파일 생성 - main 함수의 기게어 명령어를 ..