스터디 4주차

정재연·2022년 2월 4일
0

스터디

목록 보기
1/2
메모리상의 데이터 배치
프로그램 실행
메모리 전력 소비

메모리상의 데이터 배치

정적 데이터

메모리에 명령어데이터를 담는 것을 알게 되었습니다.
이러한 데이터를 정적데이터라고 하는데,
정적 이라는 뜻은 프로그램을 작성 할 때, 얼마나 많은 메모리가 필요한지 알고 있다는 뜻입니다.

프로그램을 실행 할 때 스택을 위한 메모리가 필요합니다.
따라서 이런 여러 데이터 영역을 충돌하지 않게 배치되어야 합니다.

메모리 관리장치(MMU)가 없을 때의 메모리 배치

이 두 배치도의 차이점은 하버드 구조에서 명령어가 별도의 메모리에 존재한다는 점입니다.


동적 데이터 (Dynamic data)

대부분의 프로그램은 동적 데이터를 다룹니다.
동적이란 프로그램을 실행하기 전까지 크기를 알 수 없는 데이터를 말합니다.
서버에서 실시간으로 변환되어 적용되어지는 데이터를 동적 데이터라고 합니다.

  • : 동적 데이터는 주로 정적 데이터 영역의 에 쌓이는데 이것을 이라고 합니다.
  • 더 많은 데이터를 안정적으로 저장하기 위해서 스택은 아래로, 힙은 위로 자라납니다.

정적,동적 데이터


메모리 배치

  • 메모리 관리 장치(MMU)가 없는 경우
    일부 프로세서는 메모리의 시작 부분이나 끝부분에 인터럽트 벡터를 저장하는 영역이나 온침 I/Q장치를 제어하기 위한 레지스터를 확보해두기도 합니다.

  • 메모리 관리 장치(MMU)가 있는 경우
    명령, 데이터, 스택이 각기 다른 물리적 메모리 페이지에 매핑되고, 필요에 따라 할당 된 크기를 변경됩니다.

하지만 여전히 가상 메모리는 같은 메모리 배치를 사용합니다.

프로그램 실행

  • 라이브러리(함수 묶음)
    프로그램의 구성요소로 공통으로 사용 될 수 있는 특정한 기능을 모듈화 한 것이다. 프로그래밍 할때, 많이 사용되는 기능들을 이미 누군가 함수로 만들어서 저장해 둔것입니다.
    라이브러리의 장점은 이미 만들어진 기능을 가지고와 사용하기 때문에 시간을 절약 할 수 있고, 재사용하기에도 좋습니다.

라이브러리는 도서관을 뜻합니다. 영어의 의미로는 책들이 쌓여 있는 공간이라는 것에 초첨이 맞춰져 있습니다.
프로그래밍에서 말하는 라이브러리(library)는 책들의 집합이구나 라고 생각하시면 이해하기 쉽습니다.
이러한 책들은 각각 함수를 의미합니다.

  • 스타일 라이브러리 : bootstrap, tailwind, ant design, Bulma...
  • javascript 라이브러리 : Moment.js, Date.js, dateDropper.js...

라이브러리개념
js라이브러리


프로그램을 여러 파일로 조각내어 작업하는 방법도 있습니다.
가장 큰 장점은 여러 사람이 한 프로그램의 여러 부분은 동시에 할 수 있다는 점입니다.

각 프로그램을 하나로 만들기 위해서는 프로그램을 링크하기 편한 형식의 매개파일(intermediate file) 로 나누고, 링커(Linker) 라는 특별한 프로그램을 사용해 여러 조각을 하나로 연결해 실행합니다.
현재 가장 유명한 매개 파일 형식은 실행과 링크가 가능한 형식(ELF,Executable and Linkable format) 입니다.

  • ELF 파일 형식
    ELF(Executable and Linkable Format)는 실행 파일, 목적 파일, 공유 라이브러리그리고 코어 덤프를 위한 표준 파일 형식입니다.
    이 형식은 여러 섹션으로 이뤄져있습니다.

    ELF파일형식

  • 링커가 여러 파일을 하나로 합치는 과정링킹이라고 합니다.
  • 정적링킹(static linking)
    링커가 링킹을 할때, 여러 소스 파일을 하나로 합친 뒤 라이브러리 파일을 합쳐 실행 파일을 만드는 것을 말합니다.
    여러 프로그램이 똑같은 라이브러리를 사용하는 경우가 많아 졌고, 정적링킹을 사용하면 같은 라이브러리 코드가 여러 실행 파일에 반복적으로 들어가서 메모리를 낭비하고 있었습니다.
  • 동적링킹(dynamin linking)
    정적링킹의 단점을 해결 하기 위해 공유라이브러리를 사용하는 동적 링크를 발명 했습니다.

공유라이브러리를 동적 라이브러리라고 하는데, 프로그램 시작할 때 같이 로딩되어 프로그램 종료 할 때 메모리에서 해제되는 방식으로 메모리를 절약하고 스와핑을 줄여줍니다.

  • 라이브러리 VS 공유라이브러리
    라이브러리 : 프로그램을 컴파일하는 과정에서 포함시키는 오브젝트 파일들의 모임
    공유라이브러리 : 완성된 프로그램을 실행할 때 포함시키는 동적 라이브러리

    MMU가 여러 프로그램이 같은 라이브러리를 공유할 수 있게 해주었습니다.

공유 라이브러리에서 가지고 온 명령어는 해당 라이브러리를 사용하는 모든 프로그램에서 공통적입니다.

  • 진입점(entry point)과 런타임 라이브러리(runtime library)
    진입점은 프로그램의 첫 번째 명령어가 위치한 주소를 뜻합니다.
    이것이 프로그램이 실행될 때 가장 먼저 실행되는 명령어라는 뜻을 의미하지 않습니다.

  • 런타임 라이브러리
    런타임 라이브러리는 사용자 프로그램이 제대로 작동하기 위해 필요한 코드 모음입니다.
    프로그램을 이루는 모든 부분이 하나로 합쳐져서 실행파일을 이룰때 런타임 라이브러리가 추가 됩니다.
    이 런타임 라이브러리가 먼저 실행되고 나중에 진입점의 명령어가 실행됩니다.

  • 런타임 라이브러리이 하는 일
    메모리(스택과 힙 영역)설정
    정적 데이터에 위치한 데이터의 초깃값 설정

[Linking]링커/링킹이란 무엇인
가(정적링킹)

동적링킹
공유라이브러리분석
정적라이브러리와 동적라이브러리

메모리 전력 소비

  • 전력 소비와 성능?
    프로그래밍 할때, 메모리의 성능 이외에도 다른 접근이 필요합니다.
    메모리 된 데이터를 옮기기 위해서는 전력소비 됩니다.
    이것은 특히 모바일 장치에서 중요한 고려 대상이 됩니다. 제한적인 전력공급 원인인 배터리를 사용하기 때문입니다.
    최근 트랜드는 컨탠츠들이 조고해상도로의 변화가 생기면서 모바일의 전력 소비 절감을 위해 집중되고 있습니다.
    또한, 대형 인터넷 회사의 경우 컴퓨터가 아주 많기 때문에 적은 전력 소비량이 합쳐져서 아주 큰 값이 될 수 있습니다.
    전력 소비와 성능 사이의 균형을 잡는 일은 아주 어렵지만, 코드를 작성할 때, 염두에 둬야 합니다.
profile
코린이 개발자 :)

0개의 댓글