티스토리 뷰

반응형

Memory Access


  • 프로그램은 실행되기 위해서 반드시 메모리에 로드되어야 한다.
  • CPU는 오로지 레지스터와 메인 메모리에만 접근할 수 있다.
  • 메모리 유닛은 메모리 주소들의 흐름만 볼 수 있다.
    • context oblivious
      • 메모리 주소만 알고 메모리에 대한 어떤 것도 모른다.
  • Memory Protection Mechanism

Memory Protection Mechanism. Base register와 limit register의 값으로 메모리의 범위를 정한다. 메모리 주소는 다른 프로세스 영역에 접근하면 안된다.

 

 

Address Binding


  • 현대의 운영체제는 프로세스가 물리 메모리의 어떤 부분에도 상주할 수 있도록 한다.
  • 컴파일러는 symbolic addressrelocatable address(= relative address)bind 한다.
  • 링커와 로더는 relocatable addressabsolute addressbind 한다.

 

Address Binding Time

  • Compile time: 만약 메모리 주소가 연역적인 것으로 알려지면, absolute code가 생성된다; 메모리 주소의 변경이 일어나면 반드시 코드를 다시 컴파일해야 한다. 현재는 거의 쓰이지 않는다.

 

  • Load time: 메모리 주소가 compile time에 알려지지 않았으면 반드시 relocatable code를 생성해야 한다.

 

  • Execution time: 만약 프로세스가 실행되는 동안 한 개의 메모리 구역에서 다른 구역으로 옮겨갈 수 있다면, 바인딩은 런타임까지 늦춰진다.

 

 

 

 

 

 

Logical vs. Physical Address Space


  • Physical address는 메모리 유닛에게 보여진다.
  • Logical address는 CPU에 의해서 생성된다.
  • compile timeload time 바인딩 시에는 physical address와 logical address는 같은 주소를 가리킨다.
    • 항상 같은 Physical address를 바인딩한다.
  • Execution time 바인딩 시에는 다르다.

 

 

Memory Management Unit (MMU)


Virtual address를 Physical Address로 매핑하는 하드웨어 장치

Relocation register를 가지고 있는 간단한 MMU

  • 프로그램은 절대로 physical address를 볼 수 없다.
    • 프로그램은 오로지 logical address 관점에서만 동작한다.
  • 최종 physical address는 메모리에 접근될 때만 결정된다.
int a[10];
int *b;
b = a;
b = b + 4;
b = &b

위의 예에서, 5번째 줄에서 referencing을 할 때 메모리의 물리적 주소가 결정된다.

 

 

Dynamic Linking


Dynamic Linking: Execution time에 object 모듈을 연결하는 것

  • Static vs. dynamic linking
    • Static linking: 로더에 의해서 시스템 라이브러리들이 바이너리 프로그램으로 결합된다.
    • Dynamic Linking: Linking이 execution time까지 미뤄진다.
  • Dynamic Linking
    • 프로그램 내에서 라이브러리를 호출하는 곳마다 stub이라는 작은 코드 조각이 생성된다.
    • stub은 메모리 주소를 찾는 방법 또는 라이브러리를 메모리에 적재하는 법을 알고 있다.
    • 라이브러리 버전을 업데이트할 때, static linking과 다르게 모든 프로그램을 재 컴파일할 필요가 없다.
    • 운영체제의 도움이 필요하다.

 

 

 

Dynamic Linking을 사용하는 이유: 라이브러리 전체를 메모리에 복사하는 것보다는 프로그램 간의 중복된 라이브러리를 줄이기 위해

 

 

 

 

 

 

Swapping


프로세스를 실행하기 위해 필요한 메모리 공간이 물리 메모리의 용량을 넘어섰을 경우, swapping을 사용할 수 있다.

  • Swapping
    • 메모리의 프로세스를 일시적으로 디스크로 옮기거나, 디스크로부터 읽어오는 기술 (예: Round-Robin CPU 스케줄러)

 

 

Contiguous Memory Allocation (연속 메모리 할당)


Multiple partition allocation

  • Fixed-sized partitions: batch 환경에서 주로 사용됨. 한 개의 파티션에 한 개의 프로세스가 위치한다. 더 이상 사용되지 않는 방법이다.
  • Variable partition size: 메모리의 어떤 부분이 사용 가능/불가능 한 지 나타내는 테이블을 사용한다.
    • Hole: 사용 가능한 메모리 블록, 메모리 전체에 걸쳐서 흩어져있다. 프로세스가 메모리에 도착하면, 운영체제는 프로세스를 실행하기 위해 충분히 큰 블록을 찾는다.
  • 사이즈 n의 요청을 어떻게 만족하지?
    • First Fit: 프로세스를 실행하기 위해 충분히 큰 hole 중, 가장 첫 번째 hole을 할당시킨다.
    • Best Fit: 프로세스를 실행하기 위해 충분히 큰 hole 중, 가장 작은 hole을 할당시킨다.
    • Worst Fit: 가장 큰 hole을 할당시킨다.
  • 보통 first fitbest fitworst fit보다 더 나은 성능을 가진다.
반응형

'컴퓨터공학 > 운영체제' 카테고리의 다른 글

[운영체제] 가상 메모리 관리  (2) 2020.02.02
[운영체제] 메모리 관리 (2)  (0) 2020.01.24
[운영체제] 동기화 (2)  (0) 2020.01.14
[운영체제] 동기화 (1)  (0) 2020.01.10
[운영체제] 데드락  (0) 2019.10.30
댓글