5장 컴퓨터 아키텍처와 운영체제 (2)

young·2022년 7월 27일
0

📖 5장 keywords

  • 멀티태스킹
    메모리 관리 장치, 가상 메모리 시스템
  • 시스템 공간과 사용자 공간
  • 메모리

메모리 관리 장치

멀티태스킹이 필수가 된 오늘날 대부분의 마이크로프로세서에는 메모리 관리 장치(MMU, Memory Management Unit)가 들어있다.

프로그램은 가상 주소를 사용해 작성되고, MMU는 가상 주소를 물리 주소로 변환해 준다. 메모리는 이를 사용하게 된다.

MMU로 인해 폰 노이만 구조와 하버드 구조의 구분이 의미 없어졌다.
단일 메모리 버스만 사용하는 폰 노이만 구조의 시스템도 명령어 메모리와 데이터 메모리를 분리해 제공할 수 있다.

운영체제(OS)는 MMU를 사용해 사용자 프로그램에게 가상 메모리를 제공한다.

가상 메모리 시스템

요청받은 메모리가 사용 가능한 물리적 메모리의 크기보다 크면,
OS는 현재 필요하지 않은 메모리 페이지를 디스크로 옮긴다.
이를 스왑 아웃이라고 한다.

스왑 아웃한 메모리 페이지에 프로그램이 접근하면 OS는 다시 메모리 공간을 확보하고, 이를 불러온다(스왑 인).

스와핑(스왑 인, 스왑 아웃)이 일어나면 시스템 성능이 크게 저하된다.

가상 메모리 시스템은 스와핑을 하면서 디스크에 메모리 내용을 저장하거나, 디스크에서 메모리로 프로그램이나 데이터를 읽어온다.

가상 메모리와 스와핑(스왑 인, 스왑 아웃)은 메모리 계층이라는 개념을 소개했다.

시스템 공간과 사용자 공간

CPU에는 컴퓨터가 시스템 모드인지, 사용자 모드인지 결정하는 비트가 어떤 레지스터에 들어있다.

일부 명령어는 오직 시스템 모드에서만 사용할 수 있으며,
system call과 같은 명령어를 통해 사용자 모드에서 실행중인 프로그램이 시스템 모드 프로그램(운영체제)에게 요청을 보낼 수 있다.

이 방식은 사용자 프로그램으로부터 운영체제를 보호하고, 사용자 프로그램을 다른 사용자 프로그램으로부터 보호한다.
사용자 프로그램이 MMU 등 몇몇 중요한 요소에 접근할 수 없게 하기 때문에 운영체제가 사용자 프로그램을 제어할 수 있다.

메모리 계층과 성능

CPU의 속도는 점점 빨라졌지만, 메모리는 CPU의 속도를 따라잡을 수 없었다.

컴퓨터는 1초에 수십억 개의 명령어를 실행할 수 있지만,
실행할 명령어가 도착하기를 CPU가 기다려야 하거나, 메모리에 데이터를 읽거나 쓸 때까지 CPU가 기다려야 한다면
컴퓨터의 그 역량을 제대로 쓰지 못할 것이다.

CPU 메모리 컨트롤러 하드웨어는 메모리에서 연속된 열에 있는 데이터를 한꺼번에 가져온다. 이를 통해 시스템 성능을 높일 수 있다.
순차적 접근이 아니기 때문에, cache miss가 일어나도 유리하다.

  • cache miss: 캐시를 읽었으나 원하는 데이터가 없어서 메모리를 읽어야 하는 경우

코프로세서

프로세서 코어가 아주 복잡한 회로라면,
코프로세서는 몇 가지 연산만을 가진(위임받은) 회로다.

프로세서 코어가 연산에 활용할 수 있는 공간을 더 확보할 수 있다.

메모리 상의 데이터 배치

정적 데이터란 컴파일 단계에서 메모리를 차지하는 크기가 결정되는 데이터를 말한다.
동적 데이터란 런타임에서 메모리를 차지하는 크기가 결정되는 데이터다.

동적 데이터가 차지하는 영역을 heap이라고 하며, heap은 주로 정적 데이터가 차지하는 영역 위에 쌓인다.

프로그램을 실행할 때 stack을 위한 메모리가 필요하다.

stack과 heap은 같은 메모리 영역을 공유한다.
더 많은 데이터를 안정적으로 저장하기 위해 stack은 아래로 커지고 heap은 위로 커진다.
이 둘이 서로 충돌하지 않게 하는 것이 중요하다.

프로그램 실행

프로그램은 라이브러리와 여러 프로그램 조각으로 이루어진다.
이 모든 조각을 하나로 엮거나 link(연결)해야 한다.

각 프로그램을 intermediate file로 나누고, linker라는 프로그램을 통해 여러 조각을 resolve해서 실제로 실행할 수 있는 프로그램을 만든다.

과거의 정적 링크 방식은 같은 라이브러리 코드가 여러 실행 파일에 반복적으로 들어가서 메모리를 비효율적으로 사용했다.

동적 링크 방식은 MMU를 통한 공유 라이브러리를 사용한다.


정리하자면, 간단한 프로세서라도 메모리 사용을 개선하는 일은 아주 복잡하다!

profile
즐겁게 공부하고 꾸준히 기록하는 나의 프론트엔드 공부일지

0개의 댓글