본문 바로가기

CS/운영체제

(13)
메모리 할당 연속 메모리 할당 -프로세스 생성/종료 반복 -> Scattered hole 발생 -외부 단편화(External fragment) 발생: 메모리가 남지만 홀들로 쪼개져 있어서 프로그램 적재 불가 -할당방식 3가지: First-fit(최초 적합), Best-fit(최적 적합), Worst-fit(최악 적합) -메모리 낭비로 인해 페이징 기법 사용 페이징(Paging) -프로세스를 일정한 단위(page)로 자르고 메모리도 같은 단위(frame)로 자른다음 적재 -MMU안의 여러개의 relocation register를 이용하여 주소변환을 해주면 CPU는 연속적인것처럼 느낌 주소변환(Address Translation) -논리주소(Logical address) -CPU가 내는 주소(2진수) -상위 비트는 페이..
메모리 낭비 방지 메모리 낭비 방지 -동적 적재(Dynamic Loading) -프로그램 실행에 반드시 필요한 루틴/데이터만 적재 -실행후 필요하면 그때 해당 부분을 메모리에 올림 cf) 정적 적재(static loading) -동적 연결(Dynamic Linking) -공통 라이브러리 루틴 연결을 실행시까지 미룸 -하나의 공통 라이브러리 루틴만 메모리에 적재되고 다른 실행시 이 루틴과 연결 cf) 정적 연결(static linking) -Swapping -메모리에 적재돼 있으나 사용되지 않는 프로세스를 Backing store(Swap device)로 몰아내기 -swap in / swap out
모니터(monitor) 모니터 큐(상호배타로 블락된 쓰레드) 공유 자원 큐 -wait로 블락된 쓰레드 -notify()로 깨워야함 -세마포 보다 고수준의 개념 -공유자원 + 공유자원 접근 함수 -2개의 큐: 배타 동기 + 조건 동기 -Common Variable 접근 함수에는 최대 1개 쓰레드 -쓰레드가 wait()로 블록되면 새 쓰레드 진입가능 -새 쓰레드는 notify()로 블록된 쓰레드 깨울수 있음 -깨워진 쓰레드는 현재 쓰레드가 나가면 재진입할수 있음 모니터의 용도 -Mutual Exclusion(상호 배타) -Ordering(흐름 제어)
교착 상태 교착 상태 방지 -교착 상태 4가지 필요조건중 한개이상 불만족 -상호배타 -> 자원공유 가능 -보유 및 대기 -> 젓가락 놓기 -> 자원활용률 저하, 기아발생 가능 -비선점 -> 선점 가능 -환형대기 -> 패턴을 바꿈 교착 상태 검출 및 복구 -주기적으로 검사 -교착상태 발생시 복구 -검사에 따른 Overhead(계산, 메모리) 발생 -복구: 프로세스 일부 강제종료, 강제로 선점하여 할당 교착 상태 무시 -실제로 잘 일어나지 않음(무시) -발생시 PC 재시동
전통적 동기화 예제 Producer and Consumer problem(생산자 소비자 문제) -생산자가 데이터를 생산하면 소비자는 그것을 소비 -유한 버퍼 문제(Bounded Buffer problem) -상호 배타 문제: 세마포 1개로 해결(mutual) -Busy wait(e.g. CPU가 while문을 계속돌림): 세마포 2개로 해결(empty, full) Readers - Writers problem -공유 데이터 베이스 접근 -Reader는 값을 변경하지 않으니 임계구역에 여러개를 허용(cf. Writer는 상호배타로 한개만 접근해야함) Dining Philosopher problem -교착상태(Deadlock) 발생하여 기아(Starvation) 교착상태 필요조건(4가지 만족하면 발생할 가능성이 있음) -Mut..
세마포(Semaphores) 세마포(Semaphores) - 동기화 문제 해결을 위한 소프트웨어 도구 세마포의 구조 - value(number of permit), P 동작(acquire), V 동작(release) acquire(){ value = value - 1; if(value < 0){ acquire를 호출한 쓰레드를 큐안에 집어넣음(봉쇄) } } release(){ value = value + 1; if(value
프로세스 동기화 프로세스 동기화(Process synchronization) -임계구역 문제(Critical section) -공유데이터에 대한 동시(Concurrent)한 접근은 데이터의 비일관성(Inconsistency)를 초래 -해결책 -Mutual exclusion(상호배타): 오직 한 쓰레드만 진입 -Progress(진행): 진입결정은 유한시간 내 -Bounding waiting(유한대기): 어느 쓰레드라도 유한시간 내 진입가능 -주된 관심 -임계구역 문제 해결 -프로세스 실행 순서 제어(흐름 제어) -Busy wait등 비효율성 제거
쓰레드(Thread) 쓰레드(Thread) -프로그램 내부의 흐름 다중 쓰레드(Multi Threads) -한 프로그램에 2개 이상의 맥 -여러 맥이 동시에 실행되는것처럼 보인다(Concurrent) cf.Simultaneous(물리적 동시) -현대에는 Process단위가 아니라 Thread단위로 Context switching 쓰레드의 구조 -프로세스의 메모리 공간(Code, data), 자원(File, I/O) 공유 -개별적인 PC, SP(Stack Pointer), Registers, stack 비공유