Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 냅색알고리즘
- 스파르타코딩클럽
- 백준10828
- 코테
- 코딩테스트실력진단
- 합성곱연산
- 이것이자바다9장
- 백준9012
- 백준
- 이것이자바다
- 2019카카오코테
- 컴퓨터비전
- 운영체제
- BOJ
- 딥러닝
- 웹개발기초
- 확인문제
- 이것이자바다확인문제
- java
- 백준스택
- 백준온라인저지
- 코드트리
- BOJ1655
- 윤곽선검출
- 가운데를말해요
- 카카오코테
- KT포트포워딩
- 백준괄호
- 백준평범한배낭
- 백준가운데를말해요
Archives
- Today
- Total
코딩하는 락커
19. 주메모리의 관리: Chapter 9. Main Memory (Part 1) 본문
9.1 배경
- 메인 메모리는 각각의 주소가 할당된 일련의 바이트들로 구성됨
- CPU는 Program Counter(PC)가 지시하는대로 메모리로부터 다음 수행할 명령어를 가져옴
- 명령어는 필요한 경우 추가적인 데이터를 더 가져올 수 있으며
- 반대로 데이터를 메모리로 내보낼 수 도 있음
기본 하드웨어Basic Hardware
- 각각의 프로세스가 독립된 공간을 갖도록 보장해야 함
- 개별적인 메모리 공간을 분리하기 위해서는 특정 프로세스만 접근할 수 있는 합법적인 주소 영역을 설정하고 프로세스가 합법 기준(base)과 상한(limit)이라고 불리는 두 개의 레지스터들을 사용하여 이러한 보호 기법을 제공함
- 기준base 레지스터: 가장 작은 합법적인 물리 메모리 주소값을 저장하고 있음
- 상한limit 레지스터: 주어진 영역의 크기를 저장함
- ex) base = 30040, limit = 120900 이라고 할 때 프로그램은 30040 ~ 420940(30040 + 120900)까지 모든 주소를 접근할 수 있음
- 메모리 공간의 보호는 CPU 하드웨어가 사용자 모드에서 만들어진 모든 주소와 레지스터를 비교함으로써 이루어짐
- 사용자 모드에서 수행되는 프로그램이 운영체제의 메모리 공간이나 다른 사용자 프로그램의 메모리 공간에 접근하면 운영체제는 치명적인 오류로 간주하고 트랩을 발생시킴
주소의 할당Address Binding
- 프로세스의 실행 과정
- 프로그램은 원래 이진 실행 파일 형태로 디스크에 저장되어 있음
- 실행하기 위해 프로그램을 메모리로 가져와서 Process Context 내에 배치함(이 시점에 가용한 CPU에서 실행할 수 있게 됨)
- 프로세스가 실행되면 메모리에서 명령 및 데이터에 액세스 함
- 프로세스가 종료되면 다른 프로세스에서 사용하기 위해 메모리가 회수됨
- 사용자 프로세스가 00000번지부터 시작된다고 해서 이 프로그램이 이 메모리의 00000번지부터 올라와야 할 필요는 없음
- 대부분의 경우 사용자 프로그램은 위 그림과 같이 여러 단계를 거쳐 실행됨
- 이들 단계를 거치는 동안 주소들은 여러 가지 다른 표현 방식을 거치게 됨
- 원시 프로그램(소스 프로그램): symbol 형태. ex) count
- 컴파일러가 이 symbol주소를 rearrangeable 주소로 바인딩 함
- 오브젝트 파일: rearrangeable 주소. ex) 이 모듈의 첫 번째 바이트로부터 열 네번째 바이트 주소
- 링커나 로더가 rearrangeable 주소를 absolute 주소로 바인딩함
- 실행 파일: absolute(physical 주소) 주소. 74014번지
- 원시 프로그램(소스 프로그램): symbol 형태. ex) count
- 메모리 주소 공간에서 명령어와 데이터의 바인딩은 그 바인딩이 이루어지는 시점에 따라 구분됨
- compile time 바인딩
- load time 바인딩
- execution time 바인딩
논리 대 물리 주소 공간Logical Versus Physical Address Space
- 논리 주소logical address(rearrangeable 주소, virtual 주소, relative 주소): CPU가 생성하는 주소
- 물리 주소physical address(absolute 주소): 메모리가 취급하게 되는 주소, 즉 메모리 주소 레지스터(MAR)에 주어지는 주소
- 컴파일 또는 로드 시에 주소를 바인딩하면 논리 주소와 물리 주소가 같음
- 그러나 실행 시간에 주소를 바인딩하면 논리 주소와 물리 주소가 다름
- 논리 주소 공간logical address space: 프로그램에 의해 생성된 모든 논리 주소 집합
- 물리 주소 공간physical address space: 논리 주소와 일치하는 모든 물리 주소 집합
- 프로그램 실행 중에는 이와 같은 가상 주소를 물리 주소로 바꿔주어야 하는데, 이 변환mapping 작업은 하드웨어 장치인 메모리 관리 장치(memory management unit, MMU)에 의해 실행됨
- 재배치 레지스터(기준 레지스터) 속에 들어 있는 값은 주소가 메모리로 보내질 때마다 그 모든 주소에 더해짐
- ex) 재배치 레지스터 = 14000라고 하고 346번지에 액세스 하려고 할 때, 메인 메모리의 14346(14000+346)번지에 액세스하게 됨
- 사용자 프로그램은 결코 실제적인 물리 주소에 접근하지 않음
- 사용자 프로그램이 포인터를 생성하여 간접 로드 및 저장을 하기 위해 주소로 갈 때는 기준 레지스터에 대해 다시 바인딩 됨
- 사용자 프로그램은 논리 주소를 사용한 것이고, 메모리 하드웨어는 논리 주소를 실제 주소로 바꾼 것임
- 논리 주소와 실제 주소의 범위
- 논리 주소의 범위: 0~max
- 실제 주소의 범위: 기준값 R에 대해서 R+0 ~ R+max
동적 적재Dynamic Loading
- 메모리 공간의 효율적 이용을 위해서는 동적 적재dynamic loading을 해야 함
- 다이내믹 로딩에서 각 루틴은 실제 호출 되기 전까지는 메모리에 올라오지 않고 재배치 가능한 상태로 디스크에 대기하고 있음
- 먼저 main 프로그램이 메모리에 올라와 실행됨
- main 프로그램의 루틴이 다른 루틴을 호출하게 되면 호출된 루틴이 이미 메모리에 로드됐는지를 조사함
- 만약 로드 되어 있지 않다면 재배치 가능 연결 적재기relocatbale linking loader가 불려 요구된 루틴을 메모리로 가져오고 이러한 변화를 테이블에 기록함
- 그 후 CPU 제어는 중단되었던 루틴으로 보내짐
동적 연결 및 공유 라이브러리Dynamic Linking & Shared Libraries
- 동적 연결 라이브러리DLL
- 사용자 프로그램이 실행될 때 사용자 프로그램이 연결되는 시스템 라이브러리
- 정적 연결static linking시 라이브러리가 이 프로그램의 이진 프로그램 이미지에 끼어 들어감
- 반대로 동적 연결dynamic linking시에는 로딩이 연결linking이 실행 시기까지 미루어짐
- DLL은 라이브러리를 여러 프로세스 간에 공유할 수 있어 메인 메모리에 DLL 인스턴스가 하나만 있ㅇ르 수 있다는 장점이 있어 공유 라이브러리라고도 부름
- Windows 및 Linux 시스템에서 광범위하게 사용됨
9.2 연속 메모리 할당 Contiguous Memory Allocation
- 메모리를 할당하는 가장 간단한 방법 중 하나는 프로세스를 메모리의 가변 크기 파티션에 할당하는 것임
- 각 파티션에는 정확히 하나의 프로세스만 적재될 수 있음
- 가변 파티션 기법에서 운영체제는 사용 가능함 메모리 부분과 사용 중인 부분을 나타내는 테이블을 유지함
- 처음에는 모든 메모리가 사용자 프로세스에 사용 가능하며, 하나의 큰 사용 가능한 메모리 블록을 hole로 간주함
- 그러나 결국에는 메모리에는 다양한 크기의 hole이 생기게됨
- 따라서 동적 메모리 할당 문제dynamic storage allocation problem이 발생함
- 동적 메모리 할당 문제: 일련의 가용 공간 리스트로부터 크기 n바이트 블록을 요구하는 것을 어떻게 만족시킬 것이냐를 결정하는 문제
- 동적 메모리 할당 문제의 3가지 기법
- 최초 적합Firs fit
- 첫 번째 사용 가능한 가용 공간을 할당함
- 최적 적합Best fit
- 사용 가능한 공간 중에서 가장 작은 것을 택함
- 최악 적합Wort fit
- 사용 가능한 공간 중 가장 큰 것을 택함
- 최초 적합Firs fit
- 모의실험을 통해서 최초 적합과 최적 적합 모두가 시간과 메모리 이용 효율 측면에서 최악 적합보다 좋다는 것이 입증됨
단편화Fragmentation
- 최초 적합과 최적 적합 모두 외부 단편화external fragmentation 문으로 인해 어려움을 겪음
- 외부 단편화
- 유휴 공간들을 모두 합치면 충분한 공간이 되지만 그것들이 너무 작은 조각들로 여러 곳에 분산되어 있을 때 발생함
- 즉, 메모리가 너무 많은 수의 매우 작은 조각들로 단편화 되어 있는 문제를 말함
- 일반적으로 메모리를 아주 작은 공간들로 분할하고 프로세스가 요청하면 할당을 항상 이 분할된 크기의 정수배로만 해주는데, 이것을 페이징 기법이라고 하며, 이 경우 내부 단편화Internal fragmentation 문제가 발생함
- 내부 단편화
- 할당된 공간이 요구된 공간보다 약간 더 클 경우 이 두 크기의 사이의 남는 부분이 사용되지 못하는 문제를 말함
세그멘테이션
- 페이징과 유사하지만 위와 같이 종류에 따라서 가변 크기의 페이지를 사용함
'📀 운영체제' 카테고리의 다른 글
21. 가상 메모리와 디맨드 페이징: Chapter 10. Virtual Memory (Part 1) (0) | 2022.07.11 |
---|---|
20. 페이징과 스와핑: Chapter 9. Main Memory (Part 2) (0) | 2022.07.11 |
18. 데드락과 뱅커 알고리즘: Chapter 8. Deadlocks (Part 2) (0) | 2022.06.21 |
17. 데드락의 이해: Chapter 8. Deadlocks (Part 1) (0) | 2022.06.20 |
16. 철학자들은 왜 굶어 죽었을까?: Chapter 7. Synchronization Examples (Part 2 ~ Part 3) (0) | 2022.06.20 |
Comments