업데이트:

태그: , , , ,

카테고리:

메모리란

  • 메모리는 010101010101bit의 연속.
  • CPU는 memory에서 PC(program counter)에 따라서 메모리로부터 명령어를 가져온다.



CPU가 직접접근하는 저장장치

  • 레지스터와 메모리는 CPU가 직접 접근할 수 있는 유일한 범용 저장장치.
  • 모든 실행되는 명령어와 데이터들은 메모리와 CPU에 이동되어있어야한다.
  • 메모리에 명렁어와 데이터가 올라가는 것은 프로그램을 실행하면서 로더가 메모리에 이진파일로된 프로그램을 올리게 된다.


  • 접근 시간 차이
    • 레지스터는 CPU clock 1cycle 이내로 접근할 수 있는 매우 빠른 장치.
    • 메모리 접근은 이와 다르게, 많은 CPU clock cycle이 필요하기에 CPU의 입장에서 명령어 실행은 끝났으나, 메모리에 접근해서 명령어를 받아오는 시간이 오래걸리기에 stall되는 현상이 발생한다.
    • 이런 이유로 CPU와 메인 메모리 사이에는 매우 빠른 속도의 메모리인 캐시가 존재한다.


  • 프로세스간 독립된 메모리 공간 보장
    • 여러 프로세스가 메모리에 적재되는데, 개별적인 메모리 공간을 분리해주기 위해서 legal memory address space를 설정해줘야한다.
    • 이를 위해 base registerlimit register를 이용해 영역을 보호한다.
    • 스크린샷 2022-08-15 오전 4 01 13



주소 할당 (address binding)

  • 주소는 사용자 프로그램이 어떤 단계에 있는가에따라 다른 형태를 가진다.
  • 스크린샷 2022-08-15 오전 4 06 12
    1. 소스코드에서 주소는 symbol의 형태로 존재한다.ex, int a
    2. 컴파일러가 symbol을 relocatable address bind한다.ex, 이 모듈의 시작에서부터 4byte
    3. linker나 loader가 relocatable address를 absolute address로 bind한다.ex, 0x0101


  • binding 시점에따른 구분
    1. compile time binding
      • 프로세스가 메모리의 어디서부터 시작할지 미리 결정할 수 있고, 메인 메모리의 내용을 미리 알 수 있다면 컴파일러는 절대 코드를 생성한다.
      • 현대 멀티프로세싱 시스템에서는 위 2가지 조건 다 불가능하므로, 사용 X
    2. load time binding
      • 프로그램을 실행할때, 로더가 프로그램을 메인메모리로 적재할때 논리주소를 절대주소로 바꾼다.
      • 이진파일 내부에서 모든 논리주소를 절대주소로 바꾼다는 의미.
    3. excution time binding
      • 프로세스가 실행하는 중간에 한 세그먼트로부터 다른 세크먼트로 옮겨질 수 있다면 실행시간 바인딩이 허용되었다고한다.
      • 프로그램을 실행하면서 논리주소를 만날때마다 절대주소로 바꾼다.
      • 오늘날 쓰이는 기법.



논리주소, 물리주소

  • 논리주소(logical address) : 컴파일러가 생성하는 주소
  • 물리주소(physical address) : 메모리가 취급하게되는 주소, 메모리 주소 레지스터(MAR)에 주어지는 주소
  • 컴파일 시간 바인딩, 적재시간 바인딩 모두 동일한 논리주소와 물리주소를 가지지만, 실행시간 바인딩은 논리주소와 물리주소가 다르다.


  • MMU(memory-management unit
    • 스크린샷 2022-08-15 오전 4 52 04
    • 프로그램 실행시간에 가상주소(논리주소)를 물리주소로 바꿔주는 장치이다.
    • 재배치(기준) 레지스터 속에 들어있는 값은 CPU에서 메모리로 주소가 보내질때마다 더해진다.
    • 스크린샷 2022-08-15 오전 5 59 27



동적 적재

  • 메모리 공간의 효율적인 사용을 위함.
  • 프로세스 전체가 미리 메모리에 올라가있는게 아님.
  • 루틴(함수)는 호출되기 전까지는 relocatable 상태로 디스크에 있다가, main이나 다른 함수가 호출하면 호출한 함수가 이미 메모리에 적재되어있는지 확인하고, 없다면 relocatable linking loader가 해당 함수를 메모리로 가져오고 이를 테이블에 기록한다.
  • 함수가 필요한 경우에만 적재되므로, 에러처리처럼 간혹 발생하면서도 양이 많은 코드는 프로그램 크기가 클 수는 있어도 프로세스가 실제로 사용하는 메모리는 훨씬 작다.



동적 연결 및 공유 라이브러리

  • 동적 연결 라이브러리(DDL) : 사용자 프로그램이 실행될 때, 사용자 프로그램에 연결되는 시스템 라이브러리, 함수, 루틴이 호출될때 동적 라이브러리 주소에서 참조하게된다.
  • 정적 연결 라이브러리 : 프로그램을 생성할때, 정적 라이브러리는 이진 프로그램 이미지에 붙여넣어진다.


  • 동적 라이브러리의 장점
    1. 프로그램의 실행파일의 크기를 줄일 수 있다.
    2. 여러 프로세스가 라이브러리를 공유할 수 있다.
      • 이러한 이유로 공유 라이브러리라고도 불린다.


REF

Operation System Concept
Difference between compile time ,load time and execution time?
Address binding in Operating System

댓글남기기