운영체제 관련 글 순서
- 프로세스란
- 쓰레드
- CPU 스케줄링
- 동기화 툴
- 동시성 제어 예제
- 데드락
- 주 메모리
- 페이징과 스와핑
- 가상 메모리와 디맨드 페이징
- 페이지 교체 알고리즘(FIFO, OPT, LRU), 쓰레싱, working set
프로세스는 실행중인 프로그램을 뜻함.
실행중인 프로그램은 메모리에 이 프로그램이 로드되어있는 것을 뜻함.
메모리란
기억장치. 각각의 주소를 가진 대용량의 바이트 배열.
CPU는 메모리에서 불러와서 연산작업들을 하는데, 다음과 같다.
- PC가 가리키는 연산을 fecth 1
- 그 연산을 decode(해석)하여 관련된 다른 피연산자를 메모리에서 fetch 할수도 있다.
- 가져온 피연산자에 대한 연산이 실행되면, 결과는 다시 메모리에 저장(store)된다.
프로세스의 메모리 접근
- 각 프로세스가 메모리의 주소공간을 별도로 관리할 수 있는게 멀티 프로그래밍
- 각 프로세스는 할당된 메모리 주소에 base resgister(시작) & limit register(끝)을 통해 접근할 수 있음
- base register 보다 크거나 같고, base + limit register보다 작을때 접근권한을 가지고,
- 이 외의 주소공간을 접근할려고하면 segmentation fault 에러를 발생시킨다. 2
프로세스 주소 할당(Address Binding)
프로그램은 실행 가능한 binary 파일형태로 disk에 존재한다. 프로그램을 실행시키기위해 프로그램을 메모리로 옮겨진다. 이 때 실행을 위해 메모리로 옮겨지기 전 프로세스들은 Input Queue에서 대기한다.
- Input Queue에서 프로세스 하나 선택해서 메모리에 적재한다.
- 프로세스가 실행되면, 메모리의 연산과 데이터들을 접근한다.
- 프로세스가 종료되면, 프로세스가 사용하던 메모리 영역을 해제하고 다시 사용 가능해진다.
주소 할당의 일련의 과정은 아래와 같이 이루어진다.
- O/S커널이 실행된 프로그램의 주소의 할당
- 프로세스 내 Symbolic address를 컴파일러가 relocatable address 3로 할당 4
- 그 후 linker나 loader 이러한 relocatable address를 absolute address(절대 주소)로 할당한다.
주소할당순서 그림
-
- source program 단계에선 symbolic address를 가짐
- 컴파일 단계를 거치며, relocatable address로 할당
- linker에 의해 logical address 할당
- 실제로 메모리에 로드될때 physical address를 할당받음
Logical(논리) vs Physical(물리) Address Space
- 논리 주소(logical address): CPU가 사용하고 있는 주소. 물리주소와는 상관 없음.
- 물리 주소(Pyhsical address): 실제로 메모리에 로드되어있는 주소.
MMU(Memory Management Unit)
: 논리 주소를 물리주소로 변경하여 연결시켜주는 하드웨어 디바이스.
- relocation register: MMU의 base register
- 실제 변수 a의 물리적 주소가 14346일때, logical 주소 346을 주면 MMU를 거쳐서 14346으로 변경되고 그에 따른 연산처리를 해줌
유동적인 로딩(Dynamic Loading)
- 메모리 주소공간을 효율적으로 사용하기위해 파일전체를 로드하는 것이 아닌 필요한 것만 그때 로드하는 것.
- relocatable linking loader가 필요할때만 address table에 반영해준다.
Dynamic Linking and Shared Libraries
- static linking(정적 연결): 컴파일 시점에서 라이브러리 링커에 의해 연결되어 실행 파일의 일부분이 됨.
- dynamic linking(동적 연결): 해당 라이브러리를 사용할때 연결하여 사용. static linking과 다르게 주소를 참조하여 사용.
연속 메모리 할당(Contiguous Memory Allocation)
- 프로세스를 메모리에 할당하는 방식
- 싱글 섹션 메모리를 가진다.
- 위에서 봤던 basic과 limit register로 프로세스의 메모리 할당 범위를 확인하고,
- MMU내의 relocation register에 의해 물리주소와 매칭됨.
메모리 할당
variable-partition : 각 파티션에 하나의 프로세스만 적재하는 방법.
이렇게 할당하고 사용 후 해제하다보면
이런 여러 hole이 있을때 메모리 할당하는 방법
- First-Fit: 할당할 수 있는 크기의 첫번째 hole에 할당
- Best-Fit: 가장 작은 곳부터 할당
- Worst-Fit: 가장 큰 곳부터 할당
단편화(Fragmentation)
- 외부단편화(external fragmentation)
- 연속 메모리 할당에서 나타나는 현상
- 작업에 충분한 메모리 공간이 남아있지만, 남은 빈공간의 크기들이 작업 사이즈보단 작아서 실제론 이용이 불가능한 상태
- 내부단편화(internal fragmentation)
- 페이징 시에 나타나는 현상
- 각각의 공간에서 작업을 위해 사용하고 남은 공간을 뜻함.(낭비)
Segmentation
위의 연속 메모리 할당은 파티션 통째로 사용하는 것이였다면, 뒤에서나올 Pasing처럼 나누는 것.
pasing이 고정된 크기로 쪼개는것이라면, segmentationn은 종류별로 쪼개서 사용하는 것.
참조
https://4legs-study.tistory.com/46
https://asfirstalways.tistory.com/130
https://goddaehee.tistory.com/185
'CS > OS(운영체제)' 카테고리의 다른 글
가상 메모리(Virtual Memory)와 디맨드 페이징 (0) | 2022.01.10 |
---|---|
페이징과 스와핑 (0) | 2022.01.07 |
데드락(Deadlock) (0) | 2022.01.05 |
동시성 제어 예제(Bounded-Buffer, Readers-Writers (0) | 2022.01.05 |
동기화 툴(프로세스 동기화) (0) | 2022.01.05 |
댓글