오식랜드
[운영체제] 메모리 본문
반응형
메모리
- 폰노이만 구조 중 “유일한 작업공간”
- 프로세스 → 독차지 하고싶어 함
- 관리자 → 효율적 운영하고 싶어 함
- 운영체제 → 위 둘의 중재자
메모리 주소
- 0번지부터 시작
- 16진수 사용
메모리 관련 작업
- fetch : 가져오기
- 실행할 프로세스, 데이터를 메모리에 적재
- 언제 가져올지
- placement : 배치
- 어디에 가져올지
- replacement : 재배치
- 메모리가 꽉 찼을 때 비교
- 어떤 프로세스를 내보낼지
언어 번역 프로그램
- 컴파일러 : 코드를 한번에 번영
- 인터프리터 : 코드를 한줄 씩 번역
컴파일러 과정
- 에디터 (고급언어) → test.c
- 컴파일러 (어셈블리어)
- 어셈블러 (2진수) → test.obj
- 링커 (라이브러리 연결)
- 로더 (메모리 적재) → test.exe
- 다이나믹 라이브러리 : 파일 실행 시 라이브러리를 호출하는 형식 → test.dll
CPU의 크기 영향
- 32bit, 64bit로 나뉨
- 레지스터, ALU, BUS 대역폭의 크기가 동일함 (32bit cpu면 다같이 32bit)
- 메모리 크리는 2의 bit제곱임 (32bit → 2^32 → 약 4GB)
메모리 영역 구분
- 사용자 영역 / 운영체제 영역
- 경계 레지스터로 구분
- 사용자가 작업 요청 시 매번 검사
- 벗어나면 해당 프로세스 강제 종료
- 서로 침범 X
물리 주소
- 실제 주소
- 메모리 입장
- 운영체제 영역과 사용자 영역을 모두 합친 상태
- MAR 레지스터에 담기는 주소
논리주소
- 사용자 입장 (= 프로세스 입장)
- 사용자 역역 내에서 구한 주소
- 코딩 시 변수는 메모리 주소의 심볼임
- 항상 0부터 시작
메모리 오버레이
- 프로그램 크기 > 메모리 크기 일 때
- 필요한 모듈만 올려서 실행
- 모듈 구분은 프로그래머가 함
***** 메모리보다 큰 프로그램 실행이 가능하게 해주는 것
스왑 영역
- 메모리가 모자를 때 프로세스 또는 데이터가 옮겨지는 곳
- 사용자는 스왑영역까지 메모리로 인식
- 스왑 인 : 스왑영역 → 메모리로 적재
- 스왑 아웃 : 메모리 → 스왑영역으로 이동
메모리 분할
: 여러가지 프로세스를 메모리에 올리려면 필요
- 가변 분할 방식
- 세그멘테이션 기법
- 프로세스 크기에 맞게 분할
- 연속 메모리 할당 가능 (장점) (프로세스가 연속됨)
- 외부 단편화 발생
- 프로그램 크기가 맞는 자리에 들어가야하는데, 그게 안되어 빈 섹션이 발생
- 막기
- 메모리 배치 방식 필요 (예방) : 메모리 관리가 복잡해짐 (단점)
- 최초배치(first fit) : 처음 발견한 자리에 배치
- 최적배치(best fit) : 적당한 크기 중 남는 공간이 제일 적은 곳에 배치
- → 남는 조각이 제일 작으면 재사용이 불가능 → 메모리 낭비
- 최악배치(worst fit) : 남은 공간이 가장 큰 곳에 배치
- → 남는 공간을 다른 프로세스에게 재할당할 수 있음
- 조각 모음 필요 (후처리)
- 메모리 배치 방식 필요 (예방) : 메모리 관리가 복잡해짐 (단점)
- 고정 분할 방식
- 페이징 기법
- 현대 기본 관리법
- 모든 메모리 영역이 같은 크기로 분할되어있음 → 어떤 크기로 나눌지 신중한 결정 필요
- 프로세스를 조각내서 배치
- 비연속 메모리 할당
- 내부 단편화가 생김 (정해진 크기보다 조각난 프로세스 크기가 더 작아서 남는 영역)
- 메모리 관리가 수훨 (장점)
- 메모리 낭비가 있을 수 있음 (단점)
- 조각 모음 필요
조각모음
- 메모리 빈 공간을 하나의 큰 덩어리로 만드는 작업
- 프로세스 이동이 필요
- 이동하는동안 프로세스 사용 X
- 프로세스가 이동하며 지워지고 새로 써짐
- 프로세스들의 주소가 변경됨
- 시간이 많이 들음
버디 시스템
- 가변분할 + 고정분할이 섞인 느낌
- 프로세스 크기에 맞게 메모리를 2/1 씩 잘라서 사용 → 메모리가 프로세스 크기대로 나뉨
- 나뉜 구역에는 1개의 프로세스 배치
- 프로세스 종료 시 주변의 빈 조각과 합쳐짐 → 비슷한 크기라 조각모음이 쉬움
- 내부 단편화, 외부 단편화가 동시 발생
반응형
'dev-log > cs' 카테고리의 다른 글
[운영체제] 입출력장치 (0) | 2023.10.01 |
---|---|
[운영체제] 가상메모리 (0) | 2023.10.01 |
[운영체제] 교착 상태 (0) | 2023.10.01 |
[운영체제] 임계구역 (0) | 2023.10.01 |
[운영체제] 프로세스 간 통신 (0) | 2023.09.27 |
Comments