본문 바로가기

과제모음

[운영체제론]예습정리(Chp5,6 / 프로세스과정)

Q) 크기가 큰 HDD에서 프로세스를 실행시키기위하여 어떠한 방법으로 디스트의 불특정 영역에 존재하는 원본 Program을 찾아내는가?
 => 직접 HDD의 모든 범위를 검색하여 Program을 찾는것은 시간적으로도 손해이고 많은 제약이 따를 것이다. 자료구조에서 배웠던 개념인 linked-list를 활용한다면, 이러한 문제를 해결할 수 있을 것 같다. program이 최초에 설치될 당시 각각의 program마다 고유의 번호가 기재되러 있는 HeadNode를 지정하고, program이 호출이되어 process화 될때에 이 node에기재되어 있는 주소에 저장된 파일을 load해와 memory에 적재할 것이다.

Q) 대기중인 process를 Queue에 저장하는데, 이 때 우선순위가 더 높은 prcess가 들어올 경우엔 어떠한 방식으로 동작할 것인가?
=> 우리는 Queue에서의 삽입, 삭제, 정렬에 관한 자료구조를 이미 배운바가 있다. 이러한 방법들을 적용하면 우선순위에따라 프로세스를 삽입하고 재배열 하는데에 있어서 큰 어려움은 없을 것이다.

Q) 위의 방법을 실행할 경우에 계속해서 우선순위가 높은 process가 들어온다고 가정한다면, 영원히 실행이 되지 않는 process가 발생하는 경우가 있을 것이다. 이에 대한 해결책은??
=> 각 프로세스마다 정보를 나타내는 항목을 설정한 후에 대기시간을 이곳에 저장해 놓는다. 그 후에 일정한 주기(매 Clock마다) 프로세스 대기열을 검사하여, 일정 수준이상의 대기시간이 설정된 프로세스를 우선적으로 실행하도록 한다.
  * 만약 위와같은 방법이 지속적으로 발생할경우 이번엔 반대의 경우가 발생할수가 있을것이다.(새로들어온 급한 프로세스들이 실행이 안되는 경우) 이러한 문제를 해결하기 위한 방법은??
    => 처음 프로세스 대기열에 들어올때 실행 예상시간을 블록에 저장하고 대기시간과 실행 예상시간을 블록에 저장하고, 대기시간과 실행예상시간 사이에 일종의 공식을 사용하여 매 Clock마다 우선순위를 재지정하면 해결이 될 것이다.

Q) 만약 동일한 프로그램을 연속해서 실행하는경우 프로세스의 생성은 어떠한 방식으로 이루어질 것인가?
 => 윈도우즈의 작업관리자 모드에서 동일한 프로그램을 반복해서 실행하는 경우 실행횟수와 동일한 숫자만큼의 프로세스가 생성되는 것을 볼 수 있다. 하지만 매 프로세스마다 새로운 메모리 영역을 할당한다면, 공간의 낭비뿐만 아니라 심할경우 메모리에 오버플로우가 발생 할수도 있을 것이다. 이를 방지하기 위해서, OOP의 개념을 적용하여 최초 생성될 당시 부모 프로세스를 생성하고 그 이후부터는 상속을 받아 최소한의 메모리 용량을 사용하도록 설정한다. 이때 새로운 프로세스를 생성하는 것은 fork()이다.

Q) 유닉스 프로세스 모델 상에서 좀비프로세스의 상태는 어떻게 발생하는 것인가?
=> 시스템을 오래사용하다 보면 가끔 실행중인 프로그램이 없는데도 불구하고, 메모리의 점유율이 비정상적으로 높은 경우가 있었다. 모니터링 결과 이미 종료한 프로세스나 작업값들이 메모리에 아직 남아 있는 것을 확인할수가 있었다. 이러한 경우가 좀비프로세스가 아닐까 싶다.
 * 이러한 좀비 상태가 발생하는 이유는?
    => fork()로 새로운 프로세스를 생성한후 작업을 수행한후에 종료가 제대로 이루어지지 않았기 때문인것 같다. 자식 프로세스는 남아있는데 부모 프로세스사가 종료되는 경우를 예로 들 수 있을것이다. 부모프로세스가 존재하지 않으므로 자식 프로세스가 존재함에도 접근이 불가해지기 때문이다. 강제로 찾아서 직접 종료를 시키거나, 시스템자체를 리셋(리부팅) 방법밖에 존재하지 않을까 싶다.

태그