Address space

누디·2022년 10월 23일
0

OS

목록 보기
1/5
post-thumbnail

Address space

  • Address space abstraction의 목적과 이유
  • Address space 사용을 위한 API?
  • Address space 제공하기 위해 필요한 기본적인 메커니즘은?

📌 Main Memory

  • CPU외에 프로그램 실행을 위한 중요 자원
  • CPU의 instruction fetch, load/store operation, I/O를 위한 대상 공간
  • 현재는 DRAM (Dynamic RAM)이 주로 사용
    • 주기적인 refresh를 통해 메모리 상태를 유지 해줘야 하지만 단가가 낮음.
    • Power-off 시 정보 유실. (volatile memory)
  • 메모리 기술이 발전으로 성능은 발전되고 있으나, 그 총량이 제한된 귀중한 자원
    • limited and valuable resource
    • 4GB, 8GB, 16GB → 늘릴수록 $ 소모
  • 다수의 사용자, 다수의 프로그램의 실행 시 사용 경쟁이 발생하는 지점 중 하나

📌 Trend of Main memory performance

  • 메모리 기술의 발전 추이 (DDR→DDR4)
  • 소모 전압의 감소
    • 2.5V→1.2V(절반이하로감소)
  • 메모리모듈처리속도의증가
    • 266 MT/s → 2133 MT/s (8배 이상), MT/s = Mega-transfer per second
  • 집적도의 증가 : 128Mb→4Gb
  • 메모리 접근 지연 시간은 미미하게 감소(CAS latency)
    • 15ns→13~14ns

📌 Backgroud

  • 프로그램은 저장장치로부터 메모리에 적재 되어야, 프로세스 형태로 실행 될 수 있음.
  • CPU는 주 메모리 (main memory)와 레지스터들 (registers)만 직접 접근이 가능
  • 메모리의 접근의 기본 단위는 주소(address)와 워드(word)의 크기임.
  • Load/Store 명령어의 오프셋 크기, 범용 레지스터 크기 (e.g. 32비트 머신 = 4 bytes, 64bit 머신 = 8 bytes)
  • 레지스터의 접근은 하나의 CPU 클럭 동작(a cycle)으로 가능 (혹은 그 이하)
    • 매우짧은시간
    • E.g. 3.4GHz CPU clock의 경우, 1/3.4G seconds = 0.29 ns (1 ns = 10^-9 seconds)
  • 메인 메모리에 대한 접근은, 수 사이클이 소모되며, 원하는 위치를 찾는 등 조건에 따라 메모리 지연(stall)이 발생
    • 레지스터접근에비해비교적긴시간
    • E.g. DDR4 2133 MT/s의 경우, 14 ns
  • 캐쉬(cache)는 메인 메모리와 CPU 레지스터 간에 위치하여, 속도 차를 완충
    • DRAM보다 고성능 고가의 Static RAM (SRAM)이 주로 사용.
      • Power-on 이후 주기적인 refres는 필요 없지만, Power-off시 초기화 (volatile memory)
    • E.g. Intel i7 3.4 GHz L1 cache latency = 4~5 cycles의 경우, 4.5 / 3.4G seconds = 4.5 * 0.29 ns = 1.3 ns

📌 Remind : Batch and Multiprogramming

  • 여러 작업을 동시에 실행
    • 운영체제는 여러 개의 작업을 메모리에 동시에 적재
    • 현재 실행중인 작업이 I/O를 할 경우 다음 작업을 순차적 실행 (I/O overlapping)
    • 스케줄링 고려사항 – first-come, first-served
  • 장점: CPU 활용률 극대화
    • CPU가쉬는시간이없음

      스크린샷 2022-06-10 오전 5.04.58.png

📌 Early memory layout

                                                      Early day OS (Batch system) → +Multiprogramming, +Time sharing

스크린샷 2022-06-10 오전 5.05.40.png

📌 New reqirements

  • CPU 성능의 증가, 메모리 자원의 가격 하락
  • 같은 양의 일을 처리하기엔 보다 여유로워진 시스템.
  • 사용자 및 프로세스 수의 증가
  • 처리해야할 작업 요구는 많아짐
  • Multi-programming + Time sharing의 도입
  • 단순히 메모리에 다수의 프로그램 코드, 데이터를 적재하는 것 뿐만 아니라, 메모리의 할당과 해제, 그리고 프로세스 간의 전환 성능, 보호가 중요 해짐
  • 메모리 관리를 지원하는 하드웨어의 등장
  • 메모리관리의효율성및보호기능을제공
  • OS가 처리해야 할 요구의 증대
    • 다수의 프로세스들이 동작하는 다수의 메모리 공간에 대한 기본적인 처리
      • 각 프로세스들이 사용하는 메모리 영역을 구분
      • 메모리에적재,여유메모리추적및관리,메모리에서해제
      • 각 프로세스에게 주어진 메모리를 다른 프로세스들로부터 보호
    • 메모리 관리를 OS만 수행해야 하는 특권 연산으로 분리 (기존 프로그램의 권한은 저하 시킴)

📌 Goal of address space abstraction

  • Transparency 사용자 프로그램들은 메모리가 가상화 되었는지, 알지 못하며, 스스로 물리 메모리를 통째로 쓰고 있다고 생각하고 편하게 사용해야 함.
  • Efficiency 가상 메모리를 사용함에 있어 시간(빠른 접근 시간)과 공간(물리 메모리 낭비 최소화)의 측면에서 효율적이어야 함
  • Protection 한 프로세스의 address space가 다른 프로세스들의 불법적인 접근으로 부터 보호 받아야 함
    • isolation 제공 • 다수가 동시에 한 자원을 공유할 때, 각 사용자는 서로 간섭하거나 간섭 받지 말아야 함. • 메모리 자원의 경우에 address space가 isolation을 제공

📌 Address space

  • Logical memory
    • 전체 메모리를 메모리 관리의 용도에 따라 필요한 속성을 가진 여러 메모리 덩어리(segment)의 결합으로 보는 개념
    • 전체 메모리는 그 용도에 따라서 Segment들로 분할됨
      • Base 주소와 Limit (or bounds) 크기로 표현 가능
      • 읽기,쓰기,실행등의특수한권한을부여도가능
  • (Process) Address space?
    • 프로세스 실행을 위한 용도의 Logical memory들의 집합
    • 주소들로 참조 가능한 일정한 크기의 메모리 공간을 추상화 한 것
    • 용도에 따라서 다양한 세그먼트(segment)으로 나눌 수 있음
      • E.g. Code, data, heap, stack segment

📌 Linear memory concept

  • Linear memory
    • 전체 메모리를 하나의 연속된 바이트 스트림으로 보는 개념
    • Memory address (or address)를 통해 메모리의 특정 위치를 참조
    • 주소의표현크기에의해그크기가결정됨
  • Addressing
    • Linear memory의 특정 위치의 내용을 참조하는 행위
  • Physical address (PA)
    • 물리 machine에 주어져 있는 실제 물리 메모리의 직접 참조를 위한 메모리 주소
    • E.g. RAM, ROM, ...

📌 Virtual memory concept

  • Address space의 구현 형태로, 한 사용자가 하나의 물리 메모리를 스스로만 독점 사용하는 것과 같은 환영을 부여.
  • 실제 물리 메모리의 용량(capacity)에 상관없이 사용자는 자유롭게 연속적으로 데이터를 배치할 수 있음
    → (질문) 용량 한계를 넘어가는 경우는??
  • 주소 범위로 인한 한계는?
    • Linear memory 수준까지만 가능 (e.g. 32 bit = 4GB)

✔️ Virtual address (VA)

  • 가상메모리참조를위한메모리주소
  • (질문) 사용자 프로그램이 사용하는 메모리 주소는?
  • Physical address or Virtual address?
  • (질문) 물리 하드웨어인 CPU가 사용하는 메모리 주소
    는?
    - Physical address or Virtual address?

📌 Loading a user program into memory

스크린샷 2022-06-10 오후 3.19.45.png

📌 Example: C program view to address space

스크린샷 2022-06-10 오후 3.20.17.png

📌 Address space API

  • Types of memory
  • Stack: 실행 시간에 자동으로 할당/해제
    • Local variables, return address to caller, function parameters

      -Heap: 직접 할당/해제하여 계속 메모리에 유지

  • Allocation of heap memory object
    • ptr_something_in_heap = (type of something *) malloc(size_t size);
  • Release of heap memory object
  • free(ptr_something_in_heap)
  • How to manage address space well?
  • DO NOT use without allocation -DO initialize allocated memory object !
    • DO NOT forget to free() !
    • DO assign NULL to freed pointer !
  • OR, valuable memory will be leaked!
  • Malloc(), free()는 시스템 콜(system call)이 아니라 라이브러리를 호출하는 것(library call).
  • Address space에 관련된 시스템 콜은 brk() 또는 sbrk()
    • Program break 위치를 변경. - Data segment의 끝 주소
    • brk(addr): addr은 새로운 program break 주소
    • sbrk(inc): 현재 program break에서 inc 바이트 만큼 늘려 program break를 갱신
      • (질문) sbrk(0)의 의미는?
    • 위 함수들은 메모리 관리 라이브러리들이 사용하므로, 대신 malloc이나 free를 쓸 것.

✔️ abstraction을 구현하기 위한 2가지 고려사항

  • 주소 변환 측면
    • 주소의 재배치 (relocation) 과정을 통해 물리 메모리로 주소 공간을 적재함
      • 정적 재배치(Static relocation) – S/W 기반 방법으로 컴파일러를 통한 강제적 주소 수정
      • 동적 재배치(Dynamic relocation) - H/W 지원을 통해 자동적인 주소 변환
  • 보호 측면
    • 프로세스는 자유롭게 메모리에 접근하지만, 직접적인 물리 메모리 접근은 막고, 대신 OS가 개입하여 가상의 메모리 공간으로 유도함

📌 재배치를 고려하지 않은 프로그램

  • 16 KB 크기의 메모리, x위치는 15 KB를 가정
  • 컴파일러가 어셈블리어로 변환한 결과
    • 128: movl 0x0(%ebx), %eax
    • 132: addl $0x03, %eax
    • 135: movl %eax, 0x0(%ebx)
  • 프로세스 실행중에 발생하는 일
    • 메모리 주소 128 B의 명령어를 fetch
    • 명령 실행 (주소 15 KB의 값을 eax에 load)
    • 메모리 주소 132 B의 명령어를 fetch
    • 명령 실행 (메모리 참조 없음)
    • 메모리 주소 135 B의 명령어를 fetch
    • 명령 실행 (eax 값을 주소 15 KB에 store)

✔️예제) 물리 메모리의 새로운 위치에 적재한 결과

스크린샷 2022-06-10 오후 3.32.18.png

 📌동적(하드웨어 기반)재배치

  • 동적 재배치 (dynamic relocation) - 1950년대 time sharing 시스템에 도입된 재배치 방법 - CPU가 제공하는 레지스터인 Base와 limit (또는 bounds)를 활용하여 주소 변환을 수행
  • 프로그램은 주소 0에서 시작하는 형태로 작성되고 컴파일
  • 프로그램의 수행중에, OS가 적재할 물리 메모리 위치를 결정
    • Base를적절한메모리주소값으로설정
  • 프로그램 실행 중에 주어지는 모든 주소는 가상주소임
  • 모든 메모리 참조, 적재 명령에 대해 적응 필요
    • 정적 재배치는 이 부분에서 컴파일러의 도움을 받아야함
    • 동적 재배치는 별도의 하드웨어를 도입함

📌메모리 관리 유닛(MMU)

  • MMU : 실행 시간에 가상 주소를 물리 주소로 매핑하는 하드웨어 장치
  • 가장 단순한 구조를 가정한다면 다음과 같음
    • 재배치 레지스터 안에 특정한 값 X가 존재
    • 그 값 X를 유저 프로세스가 생성하는 모든 메모리 주소에 합산
    • 결과를 물리 메모리 주소로 전송
  • 즉, 가상주소는 다음 식에 의해서 물리 주소를 계산
    • 물리주소 = 가상주소 + 재배치 레지스터(base)

📌재배치 레지스터를 사용한 주소 변환

스크린샷 2022-06-10 오후 3.38.20.png

📌보호 측면의 유효한 메모리 주소 판별

  • 주어진 Logical memory의 메모리 범위 안이라면 유효함
  • 유효성 판별을 위해 limit(혹은 bounds) 레지스터를 활용
  • MMU는 모든 메모리 접근에 대해 다음을 체크
    • 해당 주소가 base와 limit 사이에 존재하는가?

📌OS의 메모리 참조시의 보호 처리 메커니즘

스크린샷 2022-06-10 오후 3.40.36.png

Semaphore

0개의 댓글