general
PCB
PCB PCB Process Control Block의 약자로, 특정 프로세스의 관리에 필요한 정보를 담고 있는 커널의 자료구조 운영 체제가 가진 프로세스에 대한 정보를 저장해 두는 곳 프로세스가 생성될 때 PCB가 생성, 완료되면 PCB는 제거 Context switching 이 발생한 경우 기존에 CPU가 처리중이던 프로세스는 자신의 PCB에 진행중이던 작업의 정보를 넣음 새로 CPU를 점유하는 프로세스는 자신의 PCB로부터 진행중이던 작업의 정보를 가져옴 운영체제는 process table을 통해 각 프로세스의 PCB를 관리 PCB에 저장된 정보 프로세스 식별자 (ID) 프로세스 상태 create, ready, running, waiting, terminated 프로그램 카운터 (PC) 다음에 실행될 명령어 주소 레지스터 정보 CPU 스케줄링 정보 메모리 관리 정보 프로세스의 주소 공간, 메모리 제한 등 프로세스 계정 정보 입출력 상태 정보 열린 파일 정보 등 여러 포인터 정보 부모, 자식 프로세스 포인터, 프로세스의 메모리 주소에 대한 포인터 등 References https://jwprogramming.
read moregeneral
Thrashing
Thrashing Thrashing Page fault가 자주 발생해서 CPU 이용률이 급격하게 떨어지는 현상 프로세스를 처리하는 시간보다 페이지 교체에 사용되는 시간이 더 소요됨 다중 프로그래밍의 정도가 높아질 때 발생 가능 Working set model 혹은 Page fault frequency를 통해 해결 가능 Working set model 지역성의 원리를 이용 특정 프로세스가 원활하게 실행되기 위해 모두 메모리에 올라와 있어야 하는 페이지 집합을 working set이라고 함 현재 페이지 이전에 참조된 n개의 페이지를 working set으로 묶어서, 한꺼번에 메모리에 올림 모든 프로세스의 working set이 메모리에 올라오지 못하면 thrashing 발생 가능 이 경우 다중 프로그래밍의 정도를 조절해야 함 매 번 working set을 계산하기에는 오버헤드가 많음 Page fault frequency Working set model의 오버헤드를 없앨 수 있음 Page fault가 발생하는 비율을 주기적으로 조사 특정 프로세스의 page fault가 일정 값보다 적으면 해당 프로세스에 할당된 page frame을 회수 반대의 경우에는 더 많은 page frame을 할당함 References https://deep-learning-challenge.
read moregeneral
Interrupt
Interrupt Interrupt CPU가 작업을 실행 중에 예외 상황이 발생한 경우 CPU에게 알려 처리할 수 있도록 하는 것 CPU는 발생한 상황을 처리하고 원래 실행중이던 작업으로 복귀 HW interrupt와 SW interrupt로 나뉨 HW interrupt 하드웨어가 발생시키는 인터럽트로, 일반적인 인터럽트를 얘기할때 해당됨 인터럽트가 시스템 버스를 통해 전달됨 입출력 인터럽트: 입출력 작업이 종료되거나 오류가 생긴 경우 발생 전원 이상 인터럽트: 전원 공급 이상시 발생 기계 착오 인터럽트: CPU의 기능적 오류로 발생 외부 신호 인터럽트: I/O 장치 외의 신호에 의해 발생 SW interrupt 소프트웨어가 발생시키는 인터럽트로, 프로그램의 오류에 의해 발생 Exception 혹은 trap이라고도 함 0으로 나누는 경우, overflow, underflow, page fault 등에서 발생 인터럽트간에도 우선순위가 있음 인터럽트 서비스 루틴 처리 중 더 높은 순위의 인터럽트가 발생시, 해당 인터럽트를 우선적으로 수행 일반적으로 HW 인터럽트가 SW 인터럽트보다 순위가 높음 실행 과정 인터럽트 요청이 들어옴 CPU는 현재 실행중이던 프로세스의 명령어를 마무리하고 실행을 중단 현재 프로세스 실행 상태를 해당 프로세스의 PCB에 저장하고, PC 값을 저장 인터럽트 처리 루틴을 실행시켜 인터럽트를 요청한 장치를 식별 인터럽트 서비스 루틴을 실행시켜 인터럽트에 대한 작업을 수행 인터럽트 서비스 루틴이 끝나면 인터럽트가 해제됨 저장해둔 PC 값을 복구해서 실행중이던 프로세스 재개 Polling 인터럽트와 달리 특정 주기마다 스레드를 돌며 시그널이 들어왔는지 확인하는 방식 구현이 쉽지만 리소스를 많이 필요로 함 인터럽트는 이런 과정 없이 인터럽트가 발생되었을때만 관련 작업을 수행하면 됨 구현이 더 어려우나, 시스템적인 부하가 적음 References https://velog.
read moregeneral
Process Scheduler
Process Scheduler Process Scheduler 프로세스 스케줄러는 어떤 프로세스에게 자원을 할당할지를 결정하는 OS 커널의 모듈 장기, 중기, 단기 스케줄러 존재 Long Term Scheduler 장기 스케줄러, 작업 스케줄러로 불림 디스크에서 어떤 프로그램을 가져와 ready queue에 적재해서 프로세스로 만들지 결정 긴 간격으로 가끔 호출되므로, 속도가 느린 것이 허용됨 I/O Bound 프로세스와 CPU Bound 프로세스를 적절히 선택해 올려야 함 현대 OS에서는 모든 프로세스가 실행되면 ready queue에 적재해 주므로, 장기 스케줄러를 두지 않음 Virtual memory를 사용하기 때문에 가능 Short Term Scheduler CPU 스케줄러, 단기 스케줄러로 불림 Ready queue에 있는 프로세스 중에서 어떤 프로세스에 CPU를 할당할 지 결정 CPU가 idle 상태가 되거나 인터럽트가 발생하는 등의 사건이 생기면 호출됨 스케줄링 알고리즘에 따라 CPU를 할당할 프로세스를 선택 아주 짧은 간격으로 빈번하게 호출되므로, 속도가 굉장히 중요 Medium Term Scheduler Swapping을 담당하는 스케줄러로, 메모리에 있는 프로세스 수를 동적으로 조절 많은 수의 프로세스에게 메모리를 할당해서 메모리가 부족해지면 시스템 성능에 저하가 발생 가능 메모리를 할당받은 일부 프로세스에게서 메모리를 빼앗아 디스크에 저장하는 swap out을 수행 Block 된 프로세스 혹은 우선순위가 낮은 프로세스 먼저 반대로 swap in을 통해 swap out된 프로세스에게 다시 메모리를 할당하기도 함 References https://kosaf04pyh.
read moregeneral
Process Synchronization
Process Synchronization Race Condition 여러 프로세스가 공유하는 데이터에 concurrent하게 접근하는 상황에서, 접근하는 순서에 따라 결과가 달라지는 현상 실행할 때 마다 결과가 달라질 수 있기 때문에 발생하면 안됨 자원의 일관성을 유지하기 위해 프로세스간의 동기화(synchronization)가 필요 Critical Section 프로세스간 공유 변수를 사용하거나 파일을 쓰는 등의 역할을 하는 코드 구역 두 개 이상의 프로세스가 critical section (임계 영역)에서 실행되면 race condition이 발생됨 Race condition을 방지하고 임계 영역을 보호하기 위해서는 다음 조건들을 만족해야 함 Mutual Exclustion 한번에 한 프로세스만 임계 영역에서 실행 가능 임계 영역에서 실행 중인 프로세스가 있다면 다른 프로세스는 임계 영역에서 실행 불가 Progress 임계 영역에 실행 중인 프로세스가 없는 경우, 임계 영역에 들어갈 수 있는 프로세스 중 하나를 선택해서 진입시켜야 함 이 결정이 무한히 연기되면 안 됨 Bounded Waiting 한 프로세스가 임계 영역에 진입 요청을 한 경우, 요청이 허가되기 전에 다른 프로세스들이 임계 영역에 진입할 수 있는 횟수 제한 존재 즉, 유한한 시간 내에 임계 영역에 언젠가는 들어갈 수 있다는 의미 Peterson’s solution // Process i의 경우 do { flag[i] = true; // Process i 가 임계 영역에 들어갈 준비가 됨 turn = j // Process j에게 입장 기회를 넘김 while(flag[j] && turn == j); // Process j가 임계 영역에 입장 가능하고 입장 기회가 있다면 대기 /** Critical section **/ flag[i] = false; // Process i가 임계 영역을 다 사용함을 표시 /** Remainder section **/ } 프로세스가 두 개(i, j)일 때 임계 영역을 보호하기 위해 사용 가능한 방법 turn 과 flag 라는 두 개의 공유 변수를 이용하며, 세 가지 조건을 모두 만족 flag[i]: i번째 프로세스가 임계 영역에 들어갈 준비가 되었는지 여부 turn: 임계 영역 입장할 프로세스의 순번 (i인 경우 P_i가 임계 영역에 입장) 다른 프로세스에게 임계 영역에 우선적으로 입장할 기회를 양보하고 대기 3개 이상의 프로세스에서는 사용이 불가하며, Busy waiting 문제가 존재 Busy Waiting 프로세스가 임계 영역에 입장 가능해 질 때 까지 while loop를 계속 도는 현상 계속 loop를 도므로 임계 영역이 긴 경우 CPU 사이클을 낭비한다는 단점이 존재 임계 영역이 짧은 경우에는 효율적일 수 있음 Mutex Locks acquire() { while (!
read moregeneral
User mode Kernel mode
User mode Kernel mode User mode & Kernel mode 하드웨어적 보안을 유지하기 위해 OS는 user mode와 kernel mode를 제공 프로세스는 user mode와 kernel mode를 번갈아가면서 수행됨 mode bit라는 1비트를 사용해 프로세스가 어떤 모드에 있는 지 구분 User mode (mode bit: 1) 일반적인 사용자 프로그램이 CPU의 제어권을 가지고 실행, 제한된 종류의 CPU 명령 수행 가능 시스템에 중요한 영향을 미치는 연산 불가능 System call이라는 소프트웨어 인터럽트가 발생하면 kernel mode로 넘어 감 Kernel mode (mode bit: 0) OS가 CPU의 제어권을 가지고 OS의 코드를 실행, 모든 종류의 CPU 명령 수행 가능 시스테에 중요한 영향을 미치는 연산은 여기서만 수행함으로 인해 하드웨어의 보안을 지킴 System call이 요청한 작업이 끝나면 다시 user mode로 돌아감 References https://kosaf04pyh.
read moregeneral
RPC
RPC RPC란 프로세스간 통신 기술인 IPC (inter-process communication)의 한 종류. Remote Procedure Call의 약자로, 다른 주소 공간(원격)에 있는 프로시저, 함수를 실행 가능하는 기술. 로컬 프로시저처럼 원격 프로시저를 수행할 수 있음. Client-server 구조에 기반을 둠. 동작 방식 클라이언트가 parameter stack에 넣으면서 client의 stub procedure를 호출. Client stub은 parameter를 메시지로 묶음. 이 과정을 marshalling이라고 함. Client의 OS는 transport layer를 통해 server machine에 메시지를 전송. Server의 OS는 받은 메시지를 server stub에 넘겨 줌. Server stub은 parameter들을 unpack함.
read moregeneral
Copy on Write
Copy on Write Copy on Write란? 변경 가능한 리소스를 효율적으로 복사하기 위한 기법. 특정 리소스가 복사되었지만 변경되지는 않은 경우에는 새로운 리소스를 만들지 않음. 해당 리소스에 쓰기(변경)가 수행되면 그 때 실제로 복사본을 만들게 됨. Virtual Memory에서 fork() 를 수행할 때 주로 사용됨. fork()로 자식 프로세스가 생기면, 자식 프로세스랑 부모 프로세스는 같은 페이지를 공유하게 됨. 만약 자식 프로세스가 특정 페이지를 변경하게 된다면 그 때 사본 페이지를 새로 만듦. 아래는 P1의 자식 프로세스가 Page B의 내용을 변경한 경우.
read moregeneral
Deadlock
Deadlock Deadlock 이란 시스템은 유한한 수의 자원을 가짐. 각 프로세스는 이 자원을 사용하기 전에는 요청하고, 사용 후에는 해제해야 함. 자원이 사용 불가능하다면 프로세스는 대기 상태가 됨.
Deadlock은 대기 상태의 프로세스가 다른 프로세스에 의해 점유된 자원 때문에 영원히 기다리는 상황.
Necessary Conditions 다음 네 가지 조건이 동시에 일어나야만 deadlock이 발생될 수 있음.
Mutual Exclusion 한 번에 한 프로세스만 사용 가능한 자원이 하나 이상 존재. 이 자원을 사용하려는 다른 프로세스는 해제될 때 까지 기다려야 함.
read moregeneral
Memory Management
Memory Management Memory 메모리는 일종의 byte array. 디스크에 있는 프로그램 파일이 메모리에 올라와서 프로세스가 된다.
Logical / Physical Address Physical address: 실제 메모리 자체의 인덱스. User 프로그램이 접근하지 못한다. Logical address: CPU에 의해 생성된 주소, Virtual address라고도 한다. User 프로그램이 접근할 수 있다. Logical Memory: Logical address를 주소로 가지는 공간. MMU logical address를 physical address로 바꾸는 하드웨어.
Swapping 프로세스는 메모리에 있어야 하지만, 메모리가 부족한 경우 일시적으로 backing store에 저장해 둘 수 있다.
read more