직업은 선물 트레이더

[과제]운영체제. 페이징 시뮬레이션 소프트웨어

잊어버린 과거

아무리 생각해봐도, 이 당시 내가 페이징에 대해서 제대로 알기나 했던걸까.. 싶은 그런 과제.. 엉터리 그 이상이다. 그 당시 하루만에 만들어낸 과제라서 딱히 애정이 깃들거나 그럴 새도 없었기도 했다. 소스는 맨 아래 첨부해본다. 물론, 제출용이기에 실행파일과 디버그 파일도 모두 포함되어있다.

 

 

<프로그램 계획>


1. 이 프로그램은 페이징 시스템의 원리를 구현하는데 그 목적이 있다.

2. 여기에는 스왑 인, 스왑 아웃의 동작이 포함되며 여러번의 재배치 시 메모리 중간에 구멍처럼 보이는 빈 공간이 남으면 안 된다.

3. 적재된 프로세스에 한하여, 해당 프로세스의 어느 일부분의 데이터를 요청하면 해당 데이터를 뽑아올 수 있어야 한다.

4. 적재된 프로세스의 데이터를 요청할 때는 물론, 메모리와 프로세스의 위치를 참조하기위해 페이지번호+오프셋 형식을 사용해야 한다.

5. 이를 위해 페이지 테이블이 존재하여야 한다.



<프로그램 개요>


1. NUM_PAGE 1024는 1024개의 페이지 개수를 의미한다.

2. SIZE_PAGE 8 은 각 페이지의 사이즈(8Byte)를 의미한다.

3. 프로세스 테이블 지원을 위해 pTable 구조체를 이용한다.

4. 프로세스 테이블은 필요할 때마다 malloc을 써서 동적으로 관리한다.

5. 프로세스는 pc1 ~ pc5 총 5개가 있다.

6. 프로세스의 크기는, 페이지가 512개인 것, 256개인 것, 128개인 것, 64개인 것, 32개인 것이 있다.

7. 기본적으로 switch case문을 이용 메뉴목록대로 사용할 수 있게 하여 구동하도록 했다.

8. 메모리와 프로세스를 그림데이터 형식으로 볼 수 있도록 만들어 놓았다.

9. 메모리가 프로세스에 할당되면 할당된 프로세스의 번호가 'ㅁ‘ 대신 차지하게 된다. 'ㅁ’ 표시는 빈 메모리의 표시이다.

10. 프로세스를 넣을 때, 그리고 프로세스를 제거할 때 번호를 입력하면 해당 프로세스의 작업이 진행된다.

11. 프로세스를 중복으로 넣을 수 있지만, 중복데이터는 제거할 때 한번에 전부다 빠지도록 구현했다.

12. 프로세스는 빈자리가 연속적으로 있다면 연속적으로 적재되고, 비연속적으로 빈자리가 있다면 비연속적으로 메모리에 적재된다.

13. 프로세스와 메모리의 용량을 비교하여 적재가능한지 여부를 판단한다.

14. 적재시 메모리에 데이터가 적재됨은 물론, 페이지테이블에도 적재 정보가 저장된다.

15. 프로세스 제거시엔 프로세스테이블을 이용하여 메모리 속 해당위치의 프로세스만 제거되도록 구현했다.

16. 데이터를 추출하는 상황을 가정하여 데이터를 추출하는 기능도 넣어보았다. A~Z 사이의 글자가 나오면 정상적으로 출력된 것이고, 이 때 물론 메모리에 프로세스가 적재되어있어야 한다.




<프로그램 실행화면>


*대표상황 : ‘프로세스2‘가 중간에 메모리를 비워두고 자리를 차지하고 있을 때 다른 프로세스가 적재되면 어떻게 되는가.

 

페이징 기법


먼저 4번 프로세스를 적재하엿을 때.

위쪽에서부터 빈 공간을 찾기 시작하며, 공간을 찾는 곳부터 순서대로 적재된다.

 

페이징 시스템

 

 

다음으로 3번 데이터가 들어왔을 때.

빈 공간을 차지하기만 하면 되게 하였기에

 

페이징 결과물

 

이처럼 프로세스가 서로 떨어져서 적재되기도 한다.