[WEEK 06] 컴퓨터 시스템 - 1. 컴퓨터 시스템으로의 여행 복습

신호정 벨로그·2021년 9월 11일
0

Today I Learned

목록 보기
28/89

1. 컴퓨터 시스템으로의 여행

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

1.4.1 시스템의 하드웨어 조직

버스(Buses)

시스템 내를 관통하는 전기적 배선군을 버스라고 하며, 컴포넌트들 간에 바이트 정보들을 전송한다. 버스는 일반적으로 워드라고 하는 고정 크기의 바이트 단위로 데이터를 전송하도록 설계된다. 한 개의 워드를 구성하는 바이트 수시스템마다 보유하는 기본 시스템 변수다. 32비트의 경우 4바이트, 64비트의 경우 8바이트 크기를 갖는다.

메인 메모리

메인 메모리프로세서가 프로그램을 실행하는 동안 데이터와 프로그램을 모두 저장하는 임시 저장장치다. 물리적으로 메인 메모리는 DRAM(Dynamic Random Access Memory) 칩들로 구성되어 있다. 논리적으로 메모리는 연속적인 바이트들의 배열로, 각각 0부터 시작해서 고유의 주소(배열의 인덱스)를 가지고 있다.

일반적으로 한 개의 프로그램을 구성하는 각 기계어 인스트럭션은 다양한 바이트 크기를 갖는다. x64-64 컴퓨터에서 short 타입의 데이터는 2바이트를, int, float은 4바이트, long과 double은 8바이트를 필요로 한다.

프로세서 (CPU)

주처리장치(CPU) 또는 간단히 프로세서는 메인 메모리에 저장된 인스트럭션들을 실행하는 엔진이다. 프로세서의 중심에는 워드 크기의 저장장치(레지스터)인 프로그램 카운터(PC)가 있다. 프로세서는 프로그램 카운터가 가리키는 곳의 인스트럭션을 반복적으로 실행하고 PC값이 다음 인스트럭션의 위치를 가리키도록 업데이트 한다.

1.5 캐시가 중요하다

시스템은 정보를 한 곳에서 다른 곳으로 이동시키는 일에 많은 시간을 보낸다. 기계어 인스트럭션들은 하드디스크에 저장되어 있었다. 프로그램이 로딩될 때 이들은 메인 메모리로 복사된다. 프로세서가 프로그램을 실행할 때 인스트럭션들은 메인 메모리에서 프로세서로 복사된다.

물리학의 법칙 때문에 더 큰 저장장치들은 보다 작은 저장장치들보다 느린 속도를 갖는다. 프로세서-메모리 간 격차에 대응하기 위해 캐시 메모리라고 부르는 저장장치를 고안하여 프로세서가 단기간에 필요로 할 가능성이 높은 정보를 임시로 저장할 목적으로 사용한다.

1.6 저장장치들은 계층구조를 이룬다.

컴퓨터 시스템의 저장장치들은 메모리 계층구조로 구성되어 있다. 메모리 계층구조의 주요 아이디어는 한 레벨의 저장장치가 다음 하위레벨 저장장치의 캐시 역할을 한다는 것이다. 계층의 꼭대기에서부터 맨 밑바닥까지 이동할수록 저장장치들은 더 느리고, 더 크고, 바이트 당 가격이 싸진다.

L0: 레지스터 파일
L1: L1 캐시(SRAM)
L2: L2 캐시(SRAM)
L3: L3 캐시(SRAM)
L4: 메인 메모리(DRAM)
L5: 로컬 디스크
L6: 원격 네트워크 서버

1.7 운영체제는 하드웨어를 관리한다.

운영체제는 두 가지 주요 목적을 가지고 잇다.

  1. 제멋대로 동작하는 응용프로그램들이 하드웨어를 잘못 사용하는 것을 막기 위해
  2. 응용프로그램들이 단순하고 균일한 메커니즘을 사용하여 복잡하고 매우 다른 저수준 하드웨어 장치들을 조작할 수 있도록 하기 위해

운영체제는 두 가지 목표를 근본적인 추상화(프로세스, 가상메모리, 파일)를 통해 달성하고 있다.

파일은 입출력장치의 추상화이고, 가상메모리는 메인 메모리와 디스크 입출력 장치의 추상화, 프로세스는 프로세서, 메인 메모리, 입출력장치 모두의 추상화 결과이다.

1.7.1 프로세스

프로세스는 실행 중인 프로그램에 대한 운영체제의 추상화이며 다수의 프로세스들은 동일한 시스템에서 동시에 실행될 수 있다.

1.7.3 가상메모리

가상메모리는 각 프로세스들이 메인 메모리 전체를 독점적으로 사용하고 있는 것 같은 환상을 제공하는 추상화이다. 각 프로세스는 가상주소 공간이라고 하는 균일한 메모리의 모습을 갖는다.

프로세스 가상주소공간은 아래에서부터 프로그램 코드와 데이터, 힙, 공유 라이브러리, 스택, 커널 가상메모리로 구성되어 있다.

  1. 프로그램 코드와 데이터
    코드는 모든 프로세스들이 같은 고정 주소에서 시작하며, C 전역변수에 대응되는 데이터 위치들이 따라온다.

  2. 힙(Heap): 코드와 데이터 영역 다음으로 런타임 힙이 따라온다. 크기가 고정되어 있는 코드, 데이터 영역과 달리, 힙은 프로세스가 실행되면서 C 표준함수인 malloc이나 free를 호출하면서 런타임에 동적으로 그 크기가 늘었다 줄었다 한다.

  3. 공유 라이브러리
    주소공간의 중간 부근에 C 표준 라이브러리나 수학 라이브러리와 같은 공유 라이브러리의 코드와 데이터를 저장하는 영역이 있다.

  4. 스택(Stack)
    사용자 가상메모리 공간의 맨 위에 컴파일러가 함수 호출을 구현하기 위해 사용하는 사용자 스택이 위치한다.

  5. 커널 가상메모리
    주소공간의 맨 윗부분은 커널을 위해 예약되어 있다.

  6. 커널 가상메모리
    주소공간의 맨 윗부분은 커널을 위해 예약되어 있다.

0개의 댓글