목록OS_NW/운영체제 (15)
버티의 블로그
Page Replacement AlgorithmOptimal Algorithm사실 페이지 교체 시 가장 이상적인 알고리즘은, 미래에 사용될 페이지 중 가장 적게 사용할 페이지를 교체해주는 것이다. 위에서도 frame이 7, 0, 1까지 채워진 상황에서 미래시를 보면 7을 가장 나중에 사용하기에 7을 2로 교체해준 것을 볼 수 있다. 그러나 당연히도 이 방법은 미래를 알 수 없기에, 이 알고리즘과 가장 비슷한 성능이 나오는 알고리즘을 찾고자 한다.FIFO Algorithm 기존의 FIFO와 동일한 개념으로, 가장 처음 들어온 페이지를 교체해준다. 언제나 단순한 방법이지만 그다지 좋은 성능을 보이지 못하며, 아래와 같이 특정 frame 수에서 오히려 page fault수가 늘어나는 Belady's Anoma..
기존에는 프로세스 전체를 메모리에 load하고 빼는 Swapping이란 방식을 사용했다. 그러나 이 방법으로 하면 오랜 문맥 교환 시간이 소요될 뿐더러, 메모리 용량보다 더 큰 프로그램은 실행할 수 없었고 프로세스들의 버퍼는 OS 영역 안에 남아있다는 문제점이 존재했다. 또한 다음과 같은 I/O 문제도 있었다.Pending I/O : 대기 중인 I/O가 있을 경우에 swapping을 하면 잘못된 프로세스에 I/O가 전달될 수 있다.Double Buffering : Pending I/O를 해결하기 위함으로, 데이터를 커널 공간으로 한번 더 전송한 후 I/O 디바이스로 전송하는 방식인데, 이는 추가적인 오버헤드를 발생시킨다.따라서 아래의 virtual memory를 사용하게 되었다. Vitrual memor..
Segmentation segmentation은 프로그램을 segment로 나누어 관리하는 방식이다. 여기서 segment table을 사용하는데, 이 테이블로 각 segment의 시작 주소와 크기를 관리한다. 그래서 segment 번호를 이용해 segment의 메모리 주소를 찾는데 사용된다. s : segment 번호, 이걸로 segment의 base값을 찾는다.d : offset, segment의 최대 크기, d값이 limit보다 작아야만 유효하므로 검사한다.이 둘을 더해서 최종 메모리 주소를 찾는다.segment table은 프로세스마다 다르게 가지므로, context switch 발생 시 테이블도 변경돤다. 따라서 다음 레지스터들로 테이블 정보를 기억한다.STBR(Segment-table base..
Memory Protection 프로세스가 segment 형태로 들어간게 아닌, 하나의 덩어리로 들어간 환경에서는 Base와 Limit이라는 레지스터로 CPU의 메모리 접근을 컨트롤하고 메모리를 보호할 수 있다.Base : 프로세스가 접근할 수 있는 메모리의 시작 주소를 저장Limit : 프로세스가 접근할 수 있는 메모리의 크기를 저장오른쪽 그림에서, CPU에 메모리에 접근할 때 base보다 주소값이 크고 base+limit보다 주소값이 작아야 합법적인 주소로 간주하고 접근을 허용한다.Address Binding바인딩은 명령어와 데이터에 메모리 주소를 지정해주는 과정인데, 3가지 종류가 있다.Compile time binding : 컴파일을 시작하면서 적재할 메모리 주소를 지정Load time bindi..
Deadlock 앞서 10장에서 봤던 "Dining-Philosophers Problem"을 해결하는 과정에서 Deadlock이 발생할 수 있다 했는데, 다시 말하자면 여러 프로세스가 리소스를 받을 수 없는 상태에서 동시에 리소스를 무한히 대기하는 상태로 이로 인해 시스템이 정상 작동될 수 없는 상황이다. 헷갈릴 수 있는 다른 용어들은 다음과 같다.Livelock : Deadlock과 반대로 한 프로세스가 무한히 running상태에 빠져 CPU를 점유하며 프로그램 진도를 못나가는 상태Starvation : Deadlock과 유사하지만, Starvation은 일어날 수 있는 일을 대기하는 상태이다. 그냥 우선순위가 낮아 필요한 리소스를 장시간 얻지 못하는 상태이다.Deadlock이 발생할 수 있는 필요충..
Windows Synchronization스레드간의 동기화 : 유저 모드 동기화 기법 사용스레드 동기화 시 커널 모드보다 유저 모드가 더 효율적동기화 객체 예시 : Critical Section프로세스간/스레드간의 동기화 : 커널 모드 동기화 기법 사용동기화 객체 예시 : Mutex, Semaphore, Event 객체의 시그널/비시그널 상태Windows Semaphore and Event Objects세마포어 객체CreateSemaphore : count의 초기값, 최대값을 설정해서 세마포어 생성윈도우에서의 세마포어는 wait = WaitForSingleObject, signal = ReleaseSemaphore WaitFor(single/Multiple)Object : (단일/복수) 객체가 시그널 상..