일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- OS
- 파싱테이블
- 랩실일기
- React
- 가상메모리
- 데이터분석
- 스케줄러
- 데이터베이스
- 자료구조
- NLP
- 프로세스
- DB
- 자연어처리
- 컴파일
- C언어
- 클래스
- 정보검색
- 소프트웨어공학
- 컴파일러
- 웹소프트웨어
- Linear Algebra
- 도커
- css
- docker
- 객체지향설계
- 오픈소스웹소프트웨어
- 운영체제
- 파싱
- 836
- 언어모델
- Today
- Total
observe_db
[OS] 8. Memory Management(메모리 관리) 본문
Part 1.
메모리 관리자(memory manager)
- 메모리를 관리하는 OS 부분
- 메모리의 사용부분 및 가용부분 관리
- 프로세스 요구에 따라 메모리 할당
- 사용이 끝난 메모리 공간 회수
- 메모리 공간 부족 시에 디스크를 사용한 프로세스 실행 지원(ex. 가상메모리)
메모리 관리 전략
- 적재(fetch):
- 요구 적재(deman fetch)vs 예측 적재(anticipatory fetch)
- 다음 적재할 데이터 결정
- 배치(placement)
- 데이터를 배치할 위치 결정
- 교체(replacement)
- 공간 확보를 위해 메모리에서 방출할 데이터 결정
메모리 할당
연속할당(continuous allocation)
- 프로그램을 연속인 메모리 한 곳에 배치
- 충분히 큰 연속된 공간이 없으면 프로그램 할당 불가
- 구현 단순
불연속 할당(non-continuous allocation)
- 프로그램을 여러 조각(segment, page)로 분할
- 각 조각을 메모리에 임의 배치 가능
- 많은 프로세스의 메모리 적재 가능
단일 사용자 환경 메모리 할당(연속 할당)
- 초기 컴퓨터 환경
- 한번에 user 1명만 컴퓨터 사용
- 운영체제 부재
- 입출력 장치 관리를 위한 라이브러리 Input-Output Control System(IOCS) 사용
오버레이(Overlay: 위에 놓다)
- 프로그램을 논리적 단위로 분할
- 현재 실행하는 부분만 메모리 적재
- 프로그래머가 오버레이 구조 설계 및 구현
- 큰 프로그램 실행 가능
메모리 보호 하드웨어- 경계 레지스터(boundary register)
- 사용자 프로그램 시작 주소 포함
- 프로그램에서 접근하는 주소가 경계 레지스터의 값을 벗어나는지 HW적으로 검사
스와핑(Swapping)
- 프로세스를 일시적으로 메모리에서 보조기억장치로 이동시켰다가 계속 실행시키려 할 때, 다시 메모리에 적재
- 작은 메모리 공간에서 여러 프로세스 실행 가능
- 한번에 하나의 프로세스만 메모리 차지
- 많은 OS에서 스와핑 변형 형태 지원
고정분할 다중 프로그래밍(fixed partition multiprogramming)
- 메모리를 고정된 크기로 분할
- 분할(partition) 별로 대기열(queue) 보유
- 컴파일할 때, 미리 특정 분할에 적재될 수 있도록 절대주소 지정(==이동 불가)
- 다른 분할이 비어있어도 적재 및 실행 불가
- 초창기 IBM OS/360 등에서 사용
- 재배치 가능(relocatable) 컴파일 및 적재 지원 방법
- 모든 작업을 하나의 대기열에 넣어서 어느 분할에서든 실행 가능
- 적재시 주소 변환
- 메모리 보호-경계 레지스터
- 하한(base, low boundary register) // 상한(limit, upper boundary register)
- 내부 단편화(internal fragmentation)
- 하나의 분할에 작업(프로세스) 할당하고 남은 공간
가변 분할 다중 프로그래밍(variabble partition multiprogramming)
- 고정된 분할(partition)의 경계를 없애고 각 작업에 필요한 만큼의 메모리 할당
- 외부 단편화(external fragmentation): 작업을 배치할 수 없는 작업 빈 공간 발생
- 빈공간 강제 통합(coalescing): 이웃된 빈 공간을 통합해 하나의 큰 공간을 만드는 것
- 빈공간 집약(compaction): 산재하는 빈공간을 모아서 하나의 큰 공간으로 만드는 것.(접근시간+변경까지의 비용 발생)
- 프로세스 배치 전략
- 최초 적합 전략(first-fit strategy): 가용공간 중 첫번째 공간에 배치
- 최적 적합 전략(best-fit strategy): 가용공간 중 배치할 때 남는 공간이 가장 작은 곳에 배치
- 최악 적합 전략(worst-fit strategy): 가용공간 중 배치할 때 남는 공간이 가장 큰 곳에 배치. 남는 곳에 다시 프로세스 할당 가능성.
Part 2.
가상메모리(virtual memory)
- 프로세스 전체가 메모리에 존재하지 않아도 실행될 수 있게 하는 메모리 관리 기법
- 프로세스가 사용하는 주소 공간(가상주소공간, virtual address space)과 실제 메모리 주소 공간(물리 주소 공간, physical address space) 분리
- 실행 중에 CPU내의 하드웨어인 MMU(memory management unit)가 자동으로 가상 주소를 물리 주소로 변환(매핑)
- 가상주소(virtual address)
- 프로세스에서 사용하는 주소
- 가상주소공간 V: 가상주소의 전체 집합
- 프로세스 일부는 보조기억장치에 저장
- 물리주소(physical address/real address)
- 메모리에서 사용가능한 주소
- 물리주소공간 P: 메모리 주소 공간
- 주소 변환 사상(address translation mapping)
- MMU(memory management unit)에 의해 수행
- 블록 단위 관리
가상메모리 블럭 종류
- page: 일정 크기의 블록. paging 기법
- segment: 블록 크기가 가변적. segmetation 기법
가상주소표현 v=(b,d)
- b는 블록번호. d는 변위
- b의 블록 사상표에 해당위치에 실제 블록 b의 위치 정보 저장
- d는 블록 내에 위치
가상 주소 변환: 블록 사상 테이블에 블록별 메모리 내 대응 위치 정보 포함
페이징(paging)
- 일정 크기의 블록 이용
- 프로그램 페이지 단위 분할
- 메모리도 페이지 크기 단위 분할(페이지 프레임)
- 가상주소 표현: v=(p,d)
페이지 테이블(page table)
- 각 프로세스 별로 보유
- 가상 메모리 페이지 개수에 대응하는 항목 포함
- 페이지별 정보 관리
- r: 페이지 존재 비트(page resident bit): 0-부재/1-존재
- s: 보조기억장치 내 위치 정보(secodary storage address): 페이지가 메모리에 없는 경우
- p: 페이지 프레임 번호(page frame number): 페이지가 메모리에 있는 경우
페이징 주소 변환
-직접 사상(direct mapping)
- 페이지 테이블 시작주소 레지스터
- 페이지 테이블
- 프로세스 별로 메모리에 저장
- 메모리 접근: 실제 2번의 메모리 접근 발생
-연관 사상(associative mapping)
- 변환 속도의 개선을 위해 연관메모리 사용
- 내용에 따른 메모리 접근 지원
- 동시 검색 수행
- 페이지번호 별 프레임 번호 저장
- 일반 캐시보다 고가이므로 채택 곤란(비용문제)
- 페이징을 위해 사용되는 연관 메모리를 Translation Look-aside Buffer(TLB)라 함.
-혼합방법
- 최근에 사용된 페이지 정보만 연관 메모리에 저장
- 나머지는 page table에 저장
- 변환 과정
- 연관 메모리 탐색
- 없으면 메모리 상의 페이지 테이블 탐색
- 페이지 번호와 대응 프레임 번호 정보를 연관 메모리에 저장
- 연관메모리에 공간 확보가 필요하면 최근 사용되지 않은 항목 제거
다단계 페이지 테이블(multilevel page table)
- 가상 주소공간이 크면 페이지 테이블 크기도 증가
- 페이지 테이블을 여러 단계의 페이지 테이블로 나누는 저장
- 하위 단계에는 필요한 만큼만 생성=>저장공간 절약
역페이지 테이블(inverted page table)
- 메모리의 페이지 프레임당 하나의 항목 포함
- 해시(hash) 함수를 사용하여 페이지 번호에 대응하는 역 페이지 테이블 위치 결정
- 충돌시 chaining
- 주소 변환 과정에서 (프로세스 번호, 페이지 번호) 사용 해싱
- 역 페이지 테이블의 각 항목(프로세스 번호, 페이지 번호, 체이닝 포인터 등)
- 메모리에 없는 페이지에 대한 정보는 운영체제가 별도의 자료구조로 관리
- 해시 앵커 테이블 이용한 역 페이지 테이블 방법 개선
- 해싱할 때 collision을 줄이기 위해 해싱 함수의 주소공간 확대 필요
- 역 페이지 테이블 방법에서 범위는 페이지 프레임 개수로 고정
- 별도 해시 앵커 테이블 사용하여 해시 공간 확대
페이지 공유(sharing)
- 텍스트 편집기, 컴파일러 등 읽기 전용 코드(reentrant code)는 공유 가능
- 공유된 페이지는 복사본 한 부만 존재
- 페이지 테이블을 통해 동일한 페이지 프레임 지정
Part 3.
세그먼테이션(segmentation)
- 프로세스의 메모리 공간에 대한 프로그래머의 관점
- 크기가 일정하지 않은 함수, 메인 프로그램, 스택, 힙, 전역변수 등의 개체(세그먼트)의 모임
- 세그먼트 단위로 메모리에 적재하여 실행
- 세그먼트: 프로그램에서 의미적인 단위가 되는 부분 포함. 연속된 메모리 공간. 크기는 일정하지 않음.
- 프로세스는 현재 실행되는 명령어 및 참조되는 데이터의 세그먼트가 메모리에 있으면 실행 가능
- 주소표현
- 컴파일 할 때 세그먼트별 번호를 부여하고, 번호 s와 변위 d를 사용하여 가상주소 표현(v = (s,d))
- 주소변환은 세그먼트 테이블 이용
세그먼테이션 사상 테이블(segmentation map table)
- r: 세그먼트 적재 비트
- a: 보조기억장치 주소
- l: 세그먼트 전체 길이
- s': 세그먼트 시작 주소
- 보호비트(protection bit): R/W/E/A
세그먼테이션 공유(sharing)
- 테이블에서 메모리의 동일한 위치 지정
- 페이징에서 공유보다 단순
세그먼트 접근 제어(access control): 접근 제어 모드(사진 추가)
- 보호비트는 세그먼트 사상 테이블에 저장- 프로세스가 메모리를 접근할 때 확인
- 접근하려는 세그먼트가 메모리상 부재시- 세그먼트 부재 트랩 발생
- 변위 d가 세그먼트 길이 l보다 클 때- 세그먼트 오버플로우 예외 발생
- 허용되지 않은 연산이 요구되는 경우- 세그먼트 보호 예외 발생
페이징 세그먼테이션 혼용
-페이지화된 세그먼테이션(paged segmentation)
- 세그먼트가 1개 이상의 페이지로 구성
- 세그먼트의 모든 페이지가 동시에 메모리에 있을 필욘 없음
- 가상주소 v = (s, p ,d)
- s: 세그먼트 번호, p: 페이지 번호, d: 변위
-주소변환
- 프로세스별 세그먼트 테이블&페이지 테이블
- v=(s,p,d)
-테이블 구성
- 프로세스 테이블: 전체 프로세스 정보 포함
- 세그먼트 테이블: 프로세스별로 세그먼트 정보 포함
- 페이지 테이블: 세그먼트별 페이지 정보 포함
-프로세스간 세그먼트/페이지 공유
- 세그먼트를 공유하려면 페이지 테이블 공유
- 페이지 프레임을 공유하려면 페이지 테이블에 같은 프레임 지정
'학교 공부 > 운영체제(OS)(3-1)' 카테고리의 다른 글
[OS] 10. Secondary Storage Management(보조기억장치 관리) (0) | 2023.05.26 |
---|---|
[OS] 9. Virtual Memory Management(가상 메모리 관리) (0) | 2023.05.16 |
[OS] 6. 교착상태와 무기한 연기 (0) | 2023.04.10 |
[OS] 5. 비동기 병행 실행(Asynchronous Concurrent Execution) (0) | 2023.04.06 |
[OS] 4. Thread (0) | 2023.04.05 |