목록전공 공부/운영체제 (15)
버티의 블로그
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/ccCEAq/btsHqxu61MS/rV9L7ljDdlFTRgmFf1hBUk/img.png)
앞장에서 배운 Synchronization Tools로 어떤 문제들을 해결할 수 있는지 알아본다.Bounded-Buffer Problem제한된 버퍼에 데이터를 채우고 가져가는 문제, 생산자-소비자 문제와 동일사이즈 n의 버퍼, 3개의 Semaphore 사용한다.mutex : 초기값 1, binaryfull : 데이터가 있는 부분의 양, 초기값 0, 0~nempty : 데이터가 없는 부분의 양, 초기값 n, 0~n 생산자는 비어있는 상태를 보고 데이터를 추가해야하므로, empty를 고려한다.wait(empty) : 데이터 하나를 추가할 것이므로 empty를 1 감소wait(mutex) : mutex가 1이면 mutex를 1 감소시키고 critical section으로 접근critical section(ad..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cuyKuc/btsHgB6swcA/n7YapEkVm8SMmzjCcVKNH0/img.png)
기존의 counter++를 하려면, 메모리에 존재하는 counter 변수 값을 CPU 내 레지스터 R1에 복사해온 다음, R1에서 증가시키고 다시 counter에 넘겨준다. 이처럼 high-level language인 counter++는 low-level language(assembly language)로 3개의 명령어로 쪼개져 실행된다. 여기서 문제는 위처럼 프로세스가 동시에 실행됐을 때이다. 명령어 실행 순서가 랜덤하므로 항상 다른 값이 나올 수 있다. 누가 마지막에 counter를 write했느냐에 따라 값이 변경되는데, 이런 상황을 race condition이라고 한다. OS에서도 같은 문제가 발생할 수 있다. 위 그림처럼 두 프로세스가 동시에 fork를 요청하면 생성된 프로세스 pid가 같을 수..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/kHTZP/btsG5UXU6tv/cDeKHtgXV9ejwYjGLwQGx1/img.png)
CPU Scheduling : ready 상태에 있는 프로세스 혹은 스레드 중 어느 것을 할당할 것인지 결정하는 문제CPU 스케쥴러가 스케쥴링을 수행한다.I/O bound job : 짧은 실행시간, 많은 실행 수 → 주로 사람과 상호작용하는 task가 많다.CPU bound job : 긴 실행시간, 적은 실행 수Dispatcher : 스케쥴러가 선택한 프로세스로 전환해주는 역할Context Switch를 한 뒤 CPU를 커널모드에서 유저모드로 바꾼다. 여기서 PCB를 꼭 사용한다. running 상태인 프로세스가 CPU 할당 해제가 되었을 때 (1,2,4의 경우) 새로운 프로세스를 할당하는데,1,4번의 경우에만 스케쥴링을 하는 방식을 nonpreemptive(비선점방식), 아니면 preemptive(선점..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/EH1ZO/btsGNzuOHaI/FkxKICxoqPJ32lMLDEy77k/img.png)
I/O Mapping I/O Mapping은 CPU가 I/O 장치와 통신하는 매커니즘인데, I/O 장치의 주소를 할당하는 방식에 따라 2가지로 나뉜다. Memory-mapped I/O : I/O 장치들이 CPU의 메모리 공간 내에 같이 매핑된다. I/O-mapped I/O : I/O 장치들이 메모리와 서로 다른 주소 공간에 매핑된다. Protocol for Interaction between CPU and Controller CPU는 입출력 작업의 진행 상태를 관리하여 시스템 리소스를 효율적으로 사용해야 하기 때문에 I/O(Device) Controller의 상태를 모니터링할 필요가 있다. 이에 2가지 방법이 존재한다. 식당에서 벨을 누르는 예시로 간단히 설명하자면, 누가 눌렀는지 직원이 직접 확인하는 ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/mMQEz/btsGIM07SZJ/DAJRvv1I9DzIvOmXpP9S7K/img.png)
Computer Startup 컴퓨터에 파워가 들어오면, 반드시 Bootstrap program(loader)가 Booting 작업을 한 후 시스템이 시작된다. 이 과정을 포함해서 사용자가 컴퓨터의 전원을 킨 다음 일어나는 과정은 다음과 같다. Bootstrap loader은 disk(보통 ROM)에서 OS kernel을 찾는다. 찾은 OS kernel을 메모리에 적재한다. OS 실행을 시작한다. Computer Organization 컴퓨터 시스템은 Bus라고 불리우는 장치가 CPU, 메모리, 입출력 장치, 컨트롤러 등을 모두 연결하는 구조인데, 버스는 주소 버스, 데이터 버스, 그리고 제어 버스까지 3가지 유형으로 나뉜다. 주소 버스 (Address Bus) : CPU가 메모리 또는 입출력 장치에 특..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/liTzi/btsGGdDYZxu/BIshK0kyAnAQLxsnPUq7LK/img.png)
Thread는 CPU 실행의 기본 단위로, 동일 프로세스 내에서 여러 스레드가 동시에 실행되며 멀티 태스킹을 가능하게 한다. 보통 스레드는 스레드 ID, PC, 레지스터, 스택으로 구성된다. 멀티 스레드 환경은 한 프로세스 내 여러 스레드들이 존재하는 것으로, 이들은 code, data, files(text)를 공유하지만 registers, stack, PC는 각각 다르다. 메모리를 적게 차지하고, CPU 시간을 최소화(light weight) 하기 위해 멀티 스레드를 사용한다. 이렇게 함으로써 얻는 이득은 다음과 같다. Responsiveness : 한 스레드에 문제가 생겨도 프로그램 실행을 허락함으로써 사용자에 대한 응답성이 증가한다. Resource Sharing : 프로세스의 Shared memo..