운영체제

주소 바인딩

으엉어엉 2024. 6. 14. 08:08
728x90

주소 바인딩

프로그램의 명령어와 데이터를 기억장치에 적재할 때, 그것들의 기적장치 주소를 결정하는 것

 

 

컴파일 시간 (compile time) 바인딩

  • 컴파일 시간에 절대 코드(absolute code)를 생성한다.
  • 프로그램을 기억장치 내에 적재할 위치를 컴파일 시간에 결정함.
  • 적재 위치를 바꾸려면 다시 컴파일해야 한다.

 

 적재 시간 (load time) 바인딩 

  • 컴파일 시간에 재배치 코드(relocatable code)를 생성한다.
  • 적재 시간에 적재할 위치를 결정함.
  • 미리 변환된 작업 사용

 

 실행 시간 (execution time) 바인딩

  • 프로세스가 실행 중에 기억장치의 한 세그먼트로부터 다른 세그먼트로 이동될 수 있다.
  • 바인딩은 실행시간에 결정됨 -> 계속 달라질 수 있다. -> 맵핑 테이블 필요하다
  • 변환을 하면서 사용

 

동적적재

  • 함수가 호출 될 때까지 디스크에 재배치 가능 상태로 적재 되어있다가, 호출 되면 기억장치로 적재
  • 호출 되지 않는 함수는 적재 X -> 기억장치 공간 사용률 증가

 

정적 연결: 라이브러리와 프로그램이 컴파일 될 때, 정적으로 연결 실행파일 안에 존재

동적 연결: 라이브러리가 실행파일에 있지 않고 연결 정보만 존재.. 실행 시간에 함수 호출 시 기억장치에 적재

 

 


 

논리주소 : CPU가 생성하는 가상의 주소

물리주소: 기억장치가 나타내는 실제 주소

 

 

주소 변환 : CPU에서 생성되는 논리 주소물리 주소로 변환하는 것

 

MMU (Memory Management Unit)

  • 주소 변환을 해주는 하드웨어 장치
  • 프로세스가 생성하는 논리주소에 재위치 레지스터(relocation register)의 값을 더해서 물리 주소를 구한다.

 

영체제는 어떤 프로세스에게 CPU를 할당하여 실행시킬 때, 그 프로세스의 시작 위치를 MMU의 재위치 레지스터에 셋팅한다. 이후, 프로세스가 CPU에 의해 실행될 때 생성되는 논리 주소는 MMU에 의해 물리 주소로 변환된다.

 

 

 

1. 연속 할당 기법

프로세스를 나누지 않고 기억장치에 적재하는 방법

 

프로세스들이 적재되고, 제거되면서 가용 공간이 곳곳에 만들어짐

운영체제는 기억장치의 사용 상태를 관리함 : 어떤 프로세스가 어느 공간을 사용하고 있고, 어느 공간은 가용 상태인지 관리해야 함

 

문제점: 외부 단편화 : 프로세스가 적재되었다가 제거되면서 가용 기억 공간이 작은 조각으로 나누어진다.

가용공간의 합은 충분하지만 공간이 연속적이지 않을때 발생하는 단편화

 

2. 페이징

프로세스페이지(page)라는 단위(보통 4KB)로 잘라서 기억장치에 적재하는 기법

물리적 기억 장치(physical memory)는 프레임(frame)이라 부르는 블록으로 나눈

논리 주소 공간(logical memory)은 페이지(page)라 부르는 블록으로 나눈다

 

페이지 크기 = 프레임 크기

 

문제점: 내부 단편화: 할당 된 기억공간에서 사용되지 않는 부분이 남을때.. 페이징은 프로세스당 반페이지 정도 내부단편화 가능성이 있다. 

 

페이지가 어떤 프레임에 적재되었는 지를 관리하기 위해 페이지 테이블이 필요함

 

 

논리 주소의 페이지 크기와 물리 주소의 프레임 크기를 같게 하는게 포인트.

 

  • 운영체제는 각 프로세스마다 페이지 테이블을 생성한다
  • 운영체제는 프로세스에 CPU를 할당하여 실행시킬 때, 그 프로세스의 페이지 테이블의 시작위치를 MMU레지스터에 세팅
  • 프로세스가 CPU에 의해 실행될 때, MMU에 의해 논리주소 -> 물리 주소로 변환
  • MMU는 레지스터에 셋팅 되어있는 페이지 테이블 정보를 이용해 변환

 

 

728x90

'운영체제' 카테고리의 다른 글

Thread - process ,thread  (0) 2024.11.17
Thread - 멀티태스킹 + 멀티프로세싱  (0) 2024.11.17
교착상태  (0) 2024.06.14
프로세스 동기화  (0) 2024.06.14
CPU 스케쥴  (1) 2024.04.26