목록운영체제 (6)
공부하는 스누피
Dual-Mode OS와 사용자는 컴퓨터 시스템의 자원을 공유하기 때문에 시스템 안전성을 위해 특정 실행 모드에 맞는 기능만 수행할 수 있도록 한다. 운영체제 코드를 실행하는 것과 사용자 코드를 실행하는 것을 구분해서 두 가지 모드로 만들었고, mode bit가 현재 모드를 나타낸다. 0이면 운영체제 코드를 실행하는 커널 모드(kernel mode), 1이면 사용자 응용 프로그램을 실행하는 사용자 모드(user mode)이다. 용도에 따라 2개 이상의 모드를 사용할 수도 있다. 이를 Multimode operation이라 부른다. 사용자 모드 사용자를 위해 실행되는 작업은 사용자 모드이다. 이 모드에서 작업을 수행하던 중에 운영체제 기능을 써야 할 때가 오면, 시스템 콜을 통해 사용자 모드에서 커널 모드..
교착상태 (Deadlock) : 한 스레드 집합 안의 모든 스레드가 집합 안의 다른 스레드에 의해서만 발생될 수 있는 이벤트를 무한정 기다리는 상태 ex) mutex lock을 release하는 이벤트는 다른 스레드에 의해서만 발생될 수 있음. 자원을 사용하는 순서 1. 자원 요청 ex. critical section 진입 전 2. 자원 사용 ex. critical section 영역 3. 자원 방출 ex. 작업 완료 후 자원 반납 Livelock - 스레드가 실패한 행동을 계속해서 시도할 때 발생한다. - Race condition 발생 시 자신의 lock을 즉시 release하지만, 교착 상태의 상대도 똑같이 release하기 때문에 같은 행동을 반복한다. Deadlock 조건 1. 상호 배제 Mut..
가상메모리 : 보조 메모리를 캐시로 이용하는 것. - 당장 수행할 부분만 메모리에 올려놓는 방식으로, 일부는 물리 메모리에 적재하고 나머지는 디스크 스왑 영역에 적재한다. 이를 요구 페이징 방식이라고 한다. - 다수의 프로그램을 동시에 수행할 때 지역성의 원칙을 적용하여 메모리를 효과적으로 공유한다. - 메인 메모리보다 큰 프로그램을 사용하게 해준다. - 가상 주소를 실제 주소(physical address)로 재배치하는 기능을 제공한다. => 가상 메모리 주소는 가상 페이지 번호와 페이지 offset으로 이루어져 있다. => 가상 페이지 번호는 physical page의 번호로 변환된다. => 페이지 offset은 페이지의 크기를 결정한다. - 이 기능을 주소 바인딩이라고 하며, 바인딩 시점에 따라 3..
CPU Burst 사용자 프로그램이 CPU를 직접 가지고 명령을 수행하는 것. - 계산 위주 프로그램같이 CPU Burst가 IO Burst보다 길 경우 CPU Bound Process라고 한다. - CPU Burst가 균일하지 않은 프로세스를 위해 스케줄링이 필요하다. => 보통 CPU Burst가 짧은 프로세스에게 우선적으로 CPU를 할당한다. I/O Burst I/O 요청이 발생해 커널에 의해 I/O 작업을 수행하는 것. - 대화형 프로그램같이 IO Burst가 CPU Burst보다 길 경우 IO Bound Process라고 한다. CPU 스케줄링 방식 - 비선점형 방식: CPU를 획득한 프로세스가 스스로 반납하기 전까지는 빼앗기지 않는 방식. - 선점형 방식: 강제로 CPU를 빼앗는 방식. - 디..
동기식 입출력(syncronous I/O) - 프로그램이 I/O 요청을 했을 때 해당 I/O 작업이 완료되어야 다음 작업을 할 수 있는 방식이다. => I/O가 진행되는 동안 다음 명령을 수행하지 않고 기다린다. => I/O 상태의 프로세스는 blocked state로 전환된다. => I/O가 완료되면 인터럽트를 통해 완료를 알린다. 이후 CPU의 제어권이 기존 프로그램에게 넘어간다. => blocked state의 프로세스는 wait 상태로 돌아간다. - 명령 수행 속도는 빠르지만 입출력 연산은 상대적으로 느리다. 기다리는 과정에서 자원 낭비를 초래한다. - 보통 I/O가 진행되면 CPU는 다른 프로그램의 작업을 수행하게 된다. - 입출력 요청의 동기화 : 여러 프로세스가 동시에 I/O 요청을 할 경우..
1. 프로세스 프로세스는 실행중인 프로그램이다. 프로그램을 실행시키려면 다음과 같은 요소가 필요하다. - 메모리에 저장된 프로그램 - 프로그램 코드 - 프로그램 카운터 (다음 프로그램을 가리킴) - 스택: LIFO, variables, function, parameters - Data section: 전역 데이터 - Heap: 모든 threads가 공유하는 라이브러리, loadable modules. Runtime에 할당됨. 프로세스 하나당 한 개 이상의 스레드를 가지고 있다. 프로세스가 다른 프로세스에 접근하려면 IPC(Inter-Process Communication)을 사용해야 한다. - Interprocess Communication(IPC) Process 간 협동할 수 있음 -> 데이터 공유, ..