OS

· CS/OS
P0가 A를 하나만 요청해도(어떤 요청을 해도) 받아들이지 않고, P1이 필요자원 내에 어떤 요청을 해도 받아들임 즉, 항상 safe 상태를 지향하는 매우 보수적인 알고리즘이다 deadlock은 매우 드문 현상이므로 위 알고리즘은 매우 비효율적(할당되지 않는 자원이 많다) deadlock을 일단 허용하기 때문에 최대 필요 자원을 조사하지 않음 그래프에서는 사이클이 있는지 확인 테이블에서는 낙관적으로 요청 자원이 없는 프로세스는 사용중인 자원을 반납할 것이라는 예상을 기반으로 한다 만약 P2가 자원 C를 하나 요청한 상황이라면 deadlock 상태 출처: https://core.ewha.ac.kr/publicview/C0101020140415131030840772?vmode=f
· CS/OS
request edge: 해당 프로세서가 가리킨 자원을 요청한다는 의미 (할당 전) assignment edge: 해당 자원이 가리킨 프로세서에 할당되어 있다는 의미 왼쪽 예제부터 deadlock (X), deadlock (O), deadlock (X) 현대에는 대부분 OS가 deadlock을 책임지지 않고 사용자에게 맡긴다 deadlock이 그렇게 자주 발생하지 않기 때문에 이를 미연에 방지하기 위해 하는 작업의 오버헤드 때문 두번째 그래프에서 자원2를 프로세스2에 할당하면 생길 위험한 상황을 미리 방지하고자 프로세스2에 할당 X 현재 available 자원으로 need 자원이 충족되는 프로세스를 우선으로 할당해준다 이후 자원을 다 활용하고 반납하여 available 자원이 늘어나면 또 그에 맞는 프로..
· CS/OS
= concurrency control 모니터는 공유 데이터와 그 데이터에 접근할 수 있게 하는 코드를 한 곳에 넣고 한번에 한 프로세스만 코드 수행하도록 하여 프로그래머의 부담을 덜어준다 active한 프로세스가 코드 수행을 마치거나, 특정 조건을 불만족하여 잠들게 되어야 다른 프로세스가 모니터로 들어와 active해질 수 있다 empty: 빈 버퍼를 기다리는 프로세서 줄 full: 자원을 기다리는 프로세서 줄 lock 관련 변수가 불필요함 semaphore 변수는 값을 가지고 프로세서가 코드를 수행하면서 그 값이 바뀐다 출처: https://core.ewha.ac.kr/publicview/C0101020140411143154161543?vmode=f
· CS/OS
buffer: 임시 저장 공간, buffer 조작은 포인터 이동(빈 버퍼 혹은 찬 버퍼 가리킴) 여러 생산자가 동시에 빈 버퍼에 접근, 혹은 여러 소비자가 동시에 공유 데이터에 접근 시 문제 발생 -> lock/unlock 버퍼가 모두 찼을때 생산자가 오거나 버퍼가 모두 비어있을때 소비자가 왔을때 문제 발생 -> counting writer 접근 시, 다른 writer와 모든 reader 접근 불가 reader 접근 시, 모든 writer 접근 불가 읽는 작업도 배타적으로하면 매우 비효율적 여러 reader가 동시에 도착하면 공유변수 readcount이 중복계산될 수 있으므로 lock/unlock 최초 reader는 DB에 writer 접근 못하게 막고, 최후 reader는 DB에 writer 접근 허용..
· CS/OS
Semaphores 프로그래머가 이렇게 lock/unlock 관련한 코드를 고민하기 어려우므로 앞의 방식들을 추상화한다 Semaphore S integer variable (자원의 수) (이전의 알고리즘들은 S=1인 경우라고 생각할 수 있다) 아래 두가지 atomic 연산에 의해서만 접근 가능 critical section을 수행중인 다른 프로세스를 CPU ready queue가 아닌 semaphore에 대한 wait queue에서 대기 이 연산에서 S 변수는 S가 양수면 기다리는 프로세스가 없다는 것, 음수면 기다리고 있다는 의미 (위에서와 다름) critical section의 길이가 긴 경우 block/wakeup이 좋음 critical section의 길이가 매우 짧은 경우 block/wakeup..
· CS/OS
데이터 공유 상황에서 누가 언제 어떤 데이터를 읽고 연산했는지에 따라 원하지 않는 결과가 나올 수 있기 때문에 그에 맞는 처리 필요 커널모드에서 1까지 수행하다가 인터럽트가 걸린다면 count가 감소한 작업은 인터럽트 처리 이후, 이전에 불러온 count값을 연산한 값으로 덮어씌워지므로 증가한 결과값만 남게 된다 해결: 중요한 변수를 다루는 동안에는 인터럽트가 걸려도 그 작업을 마칠때까지 인터럽트 처리 보류 real time 시스템의 엄밀한 상황이 아닌 time sharing 시스템이므로 이렇게 쉽게 해결하고 가는 것이 좋다 효율: CPU lock/unlock Test_and_set() 출처: https://core.ewha.ac.kr/publicview/C0101020140401134252676046?..
· CS/OS
큐를 나누고, CPU는 어느 큐를 먼저 고를지, 그리고 그 큐에서 어떤 프로세스를 먼저 고를지 스케줄링 CPU 사용시간이 적은 프로세스에 RR보다 더 큰 우선순위 부여 기타 상황에서의 CPU 스케줄링 Real-Time Scheduling Hard real-time systems: Hard real-time task는 정해진 시간 안에 반드시 끝내도록 스케줄링 Soft real-tme computing: Soft real-time task는 일반 프로세스에 비해 높은 우선순위를 갖도록 스케줄링 Thread Scheduling Local scheduling: user level thread는 사용자 수준의 thread library에 의해 어떤 thread를 스케줄할지 결정 Global scheduling:..
· CS/OS
CPU burst: 프로세스 실행 과정 중 CPU의 제어권을 얻어 연속적으로 인스트럭션을 실행하는 단계 I/O burst: CPU 제어권을 잃고 I/O를 실행하는 단계 CPU bound job: 계산 위주의 job (few very long CPU bursts) I/O bound job: CPU를 잡고 계산하는 시간보다 I/O에 많은 시간이 필요한 job (many short CPU bursts) 중요 용어: nonpreemtive(비선점형), preemtive(선점형) 시스템 입장에서: CPU utilization, Throughput 프로그램 입장에서: Turnaround time, Waiting time, Response time 선점형 스케줄링에서 대기 시간은 여러번 있을 수 있지만 응답 시간은 ..
· CS/OS
프로세스 생성: 부모 프로세스가 자식 프로세스 생성 -> 트리(계층 구조) 형성 프로세스는 자원을 필요로 함 (OS로부터 or 부모와 공유) 자원의 공유 Copy-on-write(COW): write하기 전까지는 부모와 자원을 공유하다가 이후 copy write하게 되면 본래의 내용이 바뀌게 됨 부모와 자식이 모든 자원을 공유하는 모델 일부를 공유하는 모델 전혀 공유하지 않는 모델 수행(execution) 부모 자식이 공존하며 수행되는 모델 자식이 종료될 때까지 부모가 기다리는 모델 주소 공간 자식은 부모의 공간 복사 (binary and OS data) 자식은 그 공간에 새로운 프로그램을 올림 유닉스의 예 fork() 시스템 콜이 새로운 프로세스 생성 이후 exec() 시스템 콜을 통해 새로운 프로그램..
· CS/OS
Thread (lightweight process): CPU의 수행 단위 thread의 구성: program counter, register set, stack space (CPU 수행 관련 정보) thread끼리 공유하는 부분(=task): code section, data section, OS resources heavyweight process: 하나의 thread 다중 스레드로 구성되면 하나의 서버 스레드가 blocked 상태여도 다른 스레드가 실행되어 빠른 처리 가능 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상 동일한 일을 수행하는 프로세스를 여러개 실행하면 메모리 낭비가 심함 스레드 생성, CPU switching이 프로세스 생성, context switching보다 ..
hjkim0502
'OS' 태그의 글 목록 (2 Page)