일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 파이썬 경사하강법
- 의료 ai 대학원 월급
- 인공지능 깃 버전관리
- DCP
- Dehaze
- 대학원 급여
- 디자인 패턴
- 정규화
- API
- 디자인패턴
- 영화 api
- 파이썬
- 대학원 월급
- 로스트아크
- 활성화 함수
- python
- 코딩테스트
- 인공지능
- 백준
- 통계학
- C# 프로젝트
- MLP
- 자바 영화 api
- 딥러닝 실험 깃 버전관리
- 자바 프로젝트
- 경사하강법
- pandas
- 자바
- 머신러닝
- 딥러닝
- Today
- Total
대학원 일기
운영체제 7장 본문
1. 메모리 관리의 개요
메모리 주소
- 메모리 한 칸은 1Byte의 크기를 가짐.
- 1Byte로 나눈 메모리의 영역을 메모리 주소로 구분(0번지부터 시작)
- CPU는 메모리에 있는 내용을 가져오거나 작업 결과를 메모리에 저장하기 위해 메모리 주소 레지스터(MAR) 사용
메모리 관리의 복잡성
- 메모리는 폰 논이만 구조의 컴퓨터에서 유일한 작업 공간이며, 모든 프로그램은 메모리에 올라와야지만 실행 가능함
- 일괄처리 시스템은 한 번에 하나의 프로그램만 실행시키므로 메모리 관리가 단순함
- 시분할 시스템은 운영체제를 포함한 모든 응용 프로그램이 메모리에 올라와 실행되므로 메모리가 관리가 복잡함
메모리 관리의 이중성
- 프로세스 입장: 메모리를 독차지하려 함
- 메모리 관리자 입장: 메모리 관리를 효율적으로 하려고 함
언어 번역 프로그램의 종류
- 컴파일러: 소스코드를 컴퓨터가 실행할 수 있는 기계어로 번역한 후, 한 번에 실행
- 인터프리터: 소스코드를 한 행씩 번역하면서 실행 -> 에러 찾기가 어렵고, 최적화하기 힘듦
- 컴파일 과정
- 소스코드 작성 및 컴파일
- 목적 코드와 라이브러리 연결
- 동적 라이브러리를 포함하여 최종 실행
메모리 관리자(Memory Manage Unit, MMU): 메모리 관리를 담당하는 하드웨어
- 메모리 관리자의 작업
- 가져오기 작업: 프로세스와 데이터를 메모리로 가져옴
- 배치 작업: 가져온 프로세스와 데이터를 메모리의 어떤 부분에 올려놓을지 결정
- 재배치 작업: 꽉 차 있는 메모리에 새로운 프로세스를 가져오기 위해 오래된 프로세스를 내보냄
- 메모리 관리자의 정책(MMU의 작업을 위한 정책)
- 가져오기 정책: 프로세스가 필요로 하는 데이터를 언제 메모리로 가져올 지 결정하는 정책
- 배치 정책: 가져온 프로세스를 메모리의 어떤 위치의 올려놓을지 결정하는 정책
- 재배치 정책: 메모리가 꽉 찼을 때 메모리 내에 있는 어떤 프로세스를 내보낼 지 결정하는 정책
2. 메모리 주소
CPU의 비트(bit)
- 한 번에 다룰 수 있는 데이터의 최대 크기 = 1word(워드)
- 32 bit CPU는 한 번에 다룰 수 있는 데이터의 최대 크기가 32bit임 (32bit = 4byte = 1word)
- 32bit CPU 내 레지스터 크기는 전부 32bit, 산술논리 연산장치와 대역폭도 32bit
Byte -> Kbyte -> Mbyte -> Gbyte -> Tbyte
- 32bit CPU의 메모리 크기: 메모리 주소의 범위 = $0$ ~ $2^{32} - 1$, 총 $2^{32}$개 표현
- 64bit CPU의 메모리 크기: 메모리 주소의 범위 = $0$ ~ $2^{64} - 1$, 총 $2^{64}$개 표현
물리 주소 공간: H·W 입장에서 바라본 주소 공간으로 컴퓨터마다 크기가 다름(절대 주소 사용)
논리 주소 공간: 사용자 입장에서 바라본 주소 공간(상대 주소 사용)
단순 메모리 구조
- 한 번에 한 가지 일만 처리하는 일괄 처리 시스템에서 볼 수 있음
- 메모리를 운영체제 영역과 사용자 영역으로 나누어 관리
- 단순 메모리 구조에서 사용자 프로세스 적재
- 사용자 프로세스는 운영체제 영역을 피하여 메모리에 적재
- 사용자 프로세스가 운영체제의 크기에 따라 매번 적재되는 주소가 달라지는 것은 번거로움
- 위 사항을 개선하여 사용자 프로세스를 메모리의 최상위부터 사용
- 그러나, 메모리를 거꾸로 사용하기 위해 주소를 변경하는 일이 복잡하기 때문에 잘 쓰이지 않음
경계 레지스터
- 운영체제 영역과 사용자 영역 경계 지점의 주소를 가진 레지스터
- CPU 내에 있는 경계 레지스터가 사용자 영역이 운영체제 영역으로 침범하는 것을 막아줌
- 메모리 관리자(MMU)는 사용자가 작업을 요청할 때마다 경계 레지스터의 값을 벗어나는지 검사하고, 만약 경계 레지스터를 벗어나는 작업을 요청하는 프로세스가 있으면 그 프로세스를 종료함.
절대 주소와 상대 주소
- 절대 주소(물리 주소 공간)
- 실제 물리주소를 가리키는 주소
- 메모리 주소 레지스터(MAR)가 사용하는 주소
- 컴퓨터에 꽂힌 램(RAM) 메모리의 실제 주소
- 운영체제 영역을 포함함
- 상대 주소(논리 주소 공간)
- 사용자 영역이 시작되는 번지를 메모리로 변경하여 사용하는 주소
- 사용자 프로세스 입장에서 바라본 주소
- 절대주소와 관계없이 항상 0번지부터 시작
- 프로세스 입장에서 상대주소가 사용할 수 없는 영역의 위치를 알 필요없고, 주소가 항상 0번지부터 시작하기 때문에 편리함
- 상대 주소를 절대 주소로 변환하는 과정
- 메모리 접근 시 상대 주소를 사용하면 절대주소로 변환해야 함
- 메모리 관리자(MMU)는 사용자 프로세스가 상대 주소를 사용하여 메모리에 접근할 때마다 상대 주소값에 재배치 레지스터 값을 더하여 절대 주소를 구함
- 재배치 레지스터는 주소 변환의 기본이 되는 주소값을 가진 레지스터로, 메모리에서 사용자 영역의 시작 주소값이 저장
3. 단일 프로그래밍 환경에서의 메모리 할당
메모리 오버레이
- 프로그램의 크기가 실제 메모리(물리 메모리)보다 클 때, 전체 프로그램을 메모리에 가져오는 대신 적당한 크기로 잘라서 가져옴
- 메모리 오버레이를 사용하면 물리 메모리보다 더 큰 프로그램도 실행이 가능함
- 메모리 오버레이의 작동방식
- 프로그램이 실행되면 필요한 모듈만 메모리에 올라와 실행
- 메모리 오버레이의 의미
- 한정된 메모리에서 메모리보다 큰 프로그램 실행 가능
- 프로그램 전체가 아니라 일부만 메모리에 올라와도 실행 가능
스왑
- 스왑 영역
- 메모리가 모자라서 쫓겨난 프로세스를 저장장치의 특별한 공간에 모아두는 영역
- 메모리에서 쫓겨났다가 다시 돌아가는 데이터가 머무는 곳이기 때문에 저장장치는 장소만 빌려주고 메모리 관리자가 관리
- 스왑인과 스왑아웃
- 스왑인: 스왑 영역에서 메모리로 데이터를 가져오는 작업
- 스왑아웃: 메모리에서 스왑영역으로 데이터를 내보내는 작업
4. 다중 프로그래밍에서의 메모리 할당
메모리 분할 방식: 메모리에 여러 개의 프로세스를 배치하는 방법
가변 분할 방식
- 프로세스의 크기에 따라 메모리를 나누는 것 -> 외부 단편화, 페이징 기법
- 프로세스의 크기에 맞게 메모리가 분할
- 메모리의 영역이 각각 다름
- 연속 메모리 할당 방식
장점: 프로세스를 한 덩어리로 처리하여 하나의 프로세스를 연속적 공간에 배치함
단점: 비어있는 공간을 하나로 합쳐야하며, 이 과정에서 다른 프로세스의 자리도 옮겨야 하므로 자리가 부족함
외부 단편화: 메모리에서 프로세스가 나간 빈 공간에 큰 프로세스가 들어가지 못해 남아있는 작은 빈 공간
- 외부 단편화 해결 방법
- 메모리 배치 방식: 작은 조각이 발생하지 않도록 프로세스를 배치하는 것
- 조각 모음: 조각이 발생했을 때, 작은 조각들을 모아서 하나의 큰 덩어리로 만드는 작업
메모리 배치 방식
- 최초 배치(first fit): 프로세스를 메모리의 빈 공간에 배치할 때, 제일 처음 만난 빈 공간에 들어감
- 빈 공간을 찾아다닐 필요 x
- 최적 배치(best fit): 프로세스를 메모리의 빈 공간에 배치할 때, 들어갈 수 있는 제일 작은 공간에 들어감
- 빈 공간을 모두 확인하는 부가적인 작업이 있지만 딱 맞는 공간을 찾을 경우, 단편화가 발생하지 않음
- 딱 맞는 공간이 없을 땐 아주 작은 조각을 만들어내는 단점이 있음 -> 외부 단편화
- 최악 배치(worst fit): 프로세스를 메모리의 빈 공간에 배치할 때, 제일 큰 공간에 들어감
- 프로세스를 배치하고 남은 공간이 크기 때문에 쓸모가 있음
- 빈 공간의 크기가 클 때는 효과적이지만, 빈 공간의 크기가 줄어들면 최적 배치처럼 작은 조각을 만듦 -> 외부 단편화
조각 모음
- 이미 배치된 프로세스를 옆으로 옮겨 빈 공간들을 하나의 큰 덩어리로 만드는 작업
- 조각 모음 순서
- 조각 모음을 하기 위해 프로세스의 동작을 멈춤
- 프로세스를 적당한 위치로 이동(프로세스가 원래의 위치에서 이동하기 때문에 프로세스의 상대 주소값을 바꿈)
- 작업을 다 마친 후 프로세스 다시 시작
고정 분할 방식
- 프로세스의 크기와 상관없이 메모리를 같은 크기로 나누는 것 -> 내부 단편화, 세그멘테이션 기법
- 프로세스의 크기에 상관없이 메모리가 같은 크기로 나뉨
- 큰 프로세스가 메모리에 올라오면 여러 조각으로 나누어 배치됨
- 비연속 메모리 할당 방식
장점: 메모리를 일정한 크기로 나누어 관리하기 때문에 메모리 관리가 수월(가변 분할 방식의 메모리 통합 같은 부가적인 작업을 할 필요가 없음)
단점: 쓸모없는 공간으로 인해 메모리가 낭비됨
내부 단편화: 프로세스를 배치하고 공간이 남는 현상
- 각 메모리 조각에 프로세스를 배치하고 공간이 남는 현상
외부 단편화와 내부 단편화의 차이
- 외부 단편화: 빈 공간보다 프로세스의 크기가 커서 결국 메모리에 적재되지 못하는 현상
- 내부 단편화: 프로세스를 배치하고 공간이 남는 현상
버디 시스템
- 버디 시스템의 작동 방식
- 프로세스의 크기에 맞게 메모리를 $frac_{1}{2}$로 자르고 프로세스를 메모리에 배치
- 나뉜 메모리의 각 구역에는 프로세스 1개만 들어감 -> 여러 프로세스 못들어감
- 프로세스가 종료되면 주변의 빈 조각과 합쳐서 하나의 큰 덩어리를 만듦
- 버디 시스템의 특징
- 가변 분할 방식처럼 메모리가 프로세스 크기대로 나뉨
- 고정 분할 방식처럼 하나의 구역에 다른 프로세스가 들어갈 수 없고, 메모리의 한 구역 내부에 조각이 생겨 내부 단편화 발생
- 비슷한 크기의 조각이 서로 모여 작은 조각을 통합하여 큰 조각을 만들기 쉬움
컴파일
컴파일 과정
컴파일러와 변수
- 컴파일러는 모든 변수에 대해 메모리를 확보하고, 오류를 찾기 위해 심벌 테이블 유지
- 컴파일러는 변수를 사용할 때마다 사용 범위를 넘는지 점검
- 컴파일러는 모든 변수를 메모리 주소로 바꾸어 기계어로 된 실행 파일을 만듦
- 컴파일러에 의해 만들어진 변수의 주소는 상대주소임
'School > Operation System' 카테고리의 다른 글
운영체제 연습문제(6, 7, 8, 9장) (0) | 2022.06.11 |
---|---|
운영체제 8장 (0) | 2022.06.09 |
운영체제 6장 (0) | 2022.06.08 |
Chapter 05 프로세스 동기화 (0) | 2022.04.16 |
Chapter 04 CPU 스케줄링 (0) | 2022.04.14 |