[ OS ]
∘ 하드웨어를 관리하고, 응용프로그램과 하드웨어 사이에서 인터페이스 역할을 하며 시스템의 동작을 제어하는 시스템 소프트웨어
∘ 시스템의 자원을 관리하는 SW
[ 프로그램 ]
∘ 작업을 위해 실행 가능한 파일
[ 프로세스 ]
∘ 실행중인 프로그램
∘ 디스크로부터 메모리에 적재되어 CPU의 할당을 받은 작업의 단위
∘ OS로부터 시스템 자원을 할당받는다. ( CPU, 주소공간, 독립된 메모리 영역 )
∘ OS는 프로세스 관리를 위해 프로세스 생성과 동시에 고유 PCB를 생성
∘ 프로세스는는 다른 프로세스의 변수나 자료구조에 접근할 수 없으며, 접근을 위해 IPC통신이 필요
∘ 프로세스 메모리 영역 : Code + Data + Stack + Heap
[ PCB ] Process Control Block
∘ 특정 프로세스에 대한 정보를 저장하고 있는 OS 커널 내의 자료구조
∘ OS가 프로세스를 관리하기 위해 프로세스 생성과 동시에 생성
∘ 저장되는 정보 : 프로세스의 식별자/상태, 프로그램 카운터, CPU 레지스터/스케줄링 정보, 메모리/입출력 정보
[ 프로세스 상태 ]
[ 상태 ]
∘ New : 프로세스가 생성
∘ Ready : 프로세스가 CPU에 실행되기 위해 대기중
∘ Running : 프로세스에 포함된 명령어가 실행되고 있는 상태
∘ Wating : 프로세스가 특정 자원이나 이벤트를 기다리는 상태
∘ Terminated : 프로세스 실행이 완료
[ 동작 ]
∘ Dispatch (Ready→Running) : 우선순위가 높은 프로세스를 선정하여 실행
∘ Interrupt (Running→Ready) : 인터럽트를 발생시켜 제어권을 빼앗음 (독점방지)
∘ Block (Running→Waiting) : 프로세스가 입출력,자원등을 기다리기 위해 대기로 전환
∘ Wake Up (Waiting→Running) : 입출력이 완료되거나 자원이 할당되어 재실행
[ Interrupt 인터럽트 ]
∘ CPU의 정상적인 프로그램 실행을 방해
∘ HW가 CPU의 서비스를 요청해야 할 경우 인터럽트 라인을 세팅하여 인터럽트 발생 (CPU 할당을 받아야하기 때문에)
∘ CPU가 TASK를 멈추고 OS의 인터럽트 서비스 루틴(ISR)으로 이동하여 인터럽트 처리 수행
∘ 내부 인터럽트
⇨ HW고장, 실행할수없는 명령어, 명령어 실행 오류, 사용권한 위배
∘ 외부 인터럽트 (주로 입출력장치에 의해)
ⅰ. 예외상황(Exception) : 허용되지 않은 연산을 수행하려고 할때 발생
ⅱ. System Call : 프로세스가 OS 서비스를 요청하기 위해 커널의 함수를 호출하는 것
ⅲ. 타이머 인터럽트 : 타이머가 일정한 시간 간격으로 CPU에게 인터럽트 요청
ⅳ. 입출력 인터럽트 : 속도가 느린 입출력장치가 입출력 준비가 완료됐음을 알리기 위해 인터럽트 요청
프로그램 실행 → 인터럽트 요청 → 프로그램 중단 → 프로그램 상태보관 →
인터럽트 처리&루틴결정&수행 → 프로그램 복구&재실행
∘ 인터럽트 서비스 루틴(ISR : 인터럽트 핸들러)
⇨ 아키텍처 구조에 따라 인터럽트 벡터를 서로 다르게 지정하여
각 인터럽트에 대해 서로 다른 일처리를 할 수 있도록 저장해두고 사용하는 것
∘ 인터럽트 벡터
⇨ 여러 인터럽트에 대해 해당 인터럽트 발생시 처리해야 할 루틴의 주소를 보관하고 있는 테이블
인터럽트 라인을 통해 인터럽트 발생 → 인터럽트 벡터 확인 → 인터럽트 핸들러의 루틴을 통해 상황 처리
[ 문맥교환 Context Switching ]
∘ CPU는 한번에 한가지 일만 처리할 수 있다.
∘ CPU를 다른 프로세스에게 할당하여 작업을 수행하는 과정
∘ 과정
ⅰ. 현재 TASK 정보를 레지스터에 저장 + PCB로 관리
ⅱ. 현재 TASK의 PCB정보 저장
ⅲ. 다음 실행할 TASK를 레지스터에 적재&실행
∘ Cache 초기화 / Memory Mapping 초기화 / 커널은 반드시 실행 ⇨ 비용 소모가 크다.
∘ 스레드는 stack 영역만 변경하면 되므로 프로세스보다 효율적이다.
[ 스레드 ]
∘ 프로세스의 실행 단위
∘ 한 프로세스에서 동작되는 여러 실행 흐름
∘ 프로세스 내의 스레드
ⅰ. Code, Data, Stack 영역을 공유 : 자원의 생성&관리의 중복성을 최소화하여 성능 향상
ⅱ. Satck, PC를 각자 할당받는다
∘ stack 각자 할당 : 스레드에 따라 독립적인 실행 흐름을 추가하기 위한 최소조건
∘ PC register 각자 할당 : 스레드는 CPU의 할당을 받다가 스케줄러에 의해 선점당한다.
스레드가 어느 부분까지 수행되었는지 기억할 필요가 있다.
[ 멀티 프로세스 ]
∘ 동시에 두가지 이상의 루틴을 실행할 수 있는 역할
∘ 하나의 프로그램을 여러 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는것
∘ 장점 : 안전성 ( 프로세스가 죽으면 그 프로세스만 죽는다 )
∘ 단점 : 문맥교환 오버헤드 ( 공유하는 메모리가 없기에 캐시 메모리 초기화 등의 무거운 작업이 진행, 시간 소모↑ )
통신기법 IPC ( 프로세스간 메모리 공유가 불가능하여 어렵고 복잡한 통신기법인 IPC를 사용해야 한다 )
[ 멀티 스레드 ]
∘ 하나의 응용프로그램을 여러개의 스레드로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는것
∘ 윈도우/리눅스 등 많은 OS들은 멀티스레딩을 기본으로 한다
∘ 웹서버 ⇨ 대표적인 멀티스레드 응용 프로그램
∘ 장점
ⅰ. 자원소모↓, 통신 간단(heap영역), 문맥교환 비용↓, 시스템 처리량↑, 응답시간↓
ⅱ. 자원을 할당하는 시스템콜↓ ⇨ 자원을 효율적으로 관리 가능
∘ 단점
ⅰ. 자원공유에서 문제가 발생할 수 있다(동기화문제)
ⅱ. 하나의 스레드가 죽으면 전체 프로세스가 영향, 어려움
[ Thread Safe ]
∘ 멀티스레드 환경에서 여러 스레드가 동시에 하나의 공유자원에 접근할 때 의도한대로 동작하는 것
∘ 방법 : 공유자원에 접근하는 임계영역을 동기화 기법으로 제어해줘야 한다. ( 상호배제 )
∘ 동기화 기법 : 뮤텍스, 세마포어
∘ 함수 x 가 Reentrant(재진입성)하다
⇨ 여러 스레드가 함수 x에 동시에 접근해도 언제나 같은 실행 결과를 보장한다.
⇨ 이를 만족하기 위해서 호출시 제공된 매개변수만으로 동작해야한다. ( 전역변수 사용 X )
∘ Reentrant하다면 Thread-Safe하다. (역은 성립하지 않는다.)
[ 동기화 Synchronization ]
∘ 여러 스레드가 동시에 공유자원에 접근하는 문제를 막기위해 자원에 대한 처리 권한을 주거나 순서를 조정하는 기법∘ 스레드 실행순서 동기화 vs. 메모리 접근 동기화
① 유저모드 동기화
∘ 커널의 힘을 빌리지 않는 동기화 기법
∘ 성능상 이점이 있으나 기능상 제한 존재
∘ 임계구역 기반 동기화
⇨ 열쇠를 얻은 스레드만 임계구역에 들어갈 수 있다.
⇨ 블로킹 된 후 열쇠가 반환되면 블로킹 상태에서 빠져나와 열쇠를 얻고 임계구역 접근 가능
∘ 인터락 함수기반 동기화 : 함수 내부적으로 한순간에 하나의 스레드에 의해서만 실행되도록 동기화
② 커널모드 동기화
ⅰ. 세마포어
∘ 동시에 접근 가능한 ‘허용가능개수’를 가진 Counter 존재
∘ 공유자원에는 Counter 값만큼의 스레드만이 접근 가능하다
∘ 세마포어는 소유 불가능
ⅱ. 뮤텍스
∘ 스레드들의 Running Time이 겹치지 않게 단독으로 실행되게 함
∘ 뮤텍스 객체를 두 스레드가 동시에 사용 불가
∘ 일종의 Locking 매커니즘
∘ Lock에 대한 소유권이 있으며 Lock을 가진 경우에만 공유자원 접근&반납 가능
∘ 세마포어는 뮤텍스가 될 수 있다(Counter==1) / 뮤텍스는 세마포어가 될 수 없다.
[ 임계영역 ]
∘ 둘 이상의 스레드가 동시에 접근해서는 안되는 공유자원을 접근하는 코드의 일부분
∘ 해당 부분에서 동기화가 필요하다.
∘ 임계구역 문제 해결 필수조건 : 상호배제, 진행, 한정된대기
[ 교착상태 Dead Lock ]
∘ 한정된 자원을 여러 곳에서 사용하려고 할때 발생하는 문제
∘ 프로세스가 자원을 얻지 못하여 다음 처리를 하지 못하는 상태
∘ 교착상태 발생 4가지 조건 ( 4가지 조건이 동시에 성립할때 발생 )
⇨ 상호배제, 점유대기, 비선점, 순환대기
![](https://blog.kakaocdn.net/dn/cmqJ3w/btrkHhAFKSo/KEKooCmw8kpE6keK9J5sCk/img.png)
∘ 해결 방법 : 교착상태 예방 vs. 교착상태 회피
① 교착상태 예방
∘ 교착상태 발생 조건중 하나를 제거함으로써 해결
∘ 자원낭비가 심하다
∘ 상호배제 부정 : 여러 프로세스가 공유자원을 사용하도록 한다.
∘ 점유대기 부정 : 프로세스가 실행되기 전 필요한 모든 자원 할당
∘ 비선점 부정 : 점유중인 자원을 반납하고 기다리게 한다.
∘ 순환대기 부정 : 자원에 고유번호를 할당하고 번호순서로 자원할당
② 교착상태 회피
∘ 은행원 알고리즘 ⇨ 최소 한명에게 대출해줄 금액은 항상 은행이 보유하고 있어야 한다.
∘ 안정상태와 불안정상태로 나눈다.
∘ 안정상태에 있으면 자원 할당 / 불안정상태에 있으면 다른 프로세스를 기다린다.
③ 교착상태 탐지
∘ 자원할당 그래프를 통해 교착상태를 탐지
④ 교착상태 회복
∘ 교착상태를 일으킨 프로세스를 종료하거나 할당된 자원을 해제함으로써 회복
스케줄러 종류
① 장기 스케줄러
∘ 많은 프로세스가 한꺼번에 메모리에 올라올 경우를 대비하여 일부 프로세스를 Ready Queue로 보내는 역할
∘ 메모리와 디스크 사이의 스케줄링 담당
② 중기 스케줄러
∘ 여유공간 마련을 위해 프로세스를 통째로 메모리→디스크 (Swapping)
∘ 많은 프로세스가 동시에 메모리에 올라오는것을 조절하는 스케줄러
③ 단기 스케줄러
∘ CPU와 메모리 사이의 스케줄링 담당
∘ Ready Queue에 존재하는 프로세스중 어떤 프로세스를 Running시킬지 결정
CPU 스케줄링
∘ 프로세스간의 작업 순서를 정하는 알고리즘
① 비선점 스케줄링
∘ FCFS (First Come First Start) : 먼저 온 프로세스가 먼저 CPU 점유
∘ SJF (Shortest Job First) : 수행시간이 짧은 프로세스가 CPU 점유
프로세스의 CPU점유시간을 알 수 없기에 비현실적
∘ Priority : 우선순위가 높은 프로세스가 먼저 실행
② 선점 스케줄링
∘ SRT (Shortest Remaining Time) : 짧은시간 순서대로 프로세스 수행
∘ Round Robin : 시분할 시스템의 성질을 활용
프로세스가 정해진 일정시간동안 수행하고 다시 대기상태로 돌아감
∘ Muti-Level Queue : 프로세스를 그룹으로 나누어 각 큐마다 다른 규칙을 지정하여 관리
∘ Multi-Level Feedback Queue : MLQ에서 프로세스가 큐 이동이 가능하다.
대기시간 조정 가능
[ 가상메모리 ]
∘ 실행중인 프로세스가 가상의 공간을 참조하여 마치 커다란 물리메모리를 갖고 있는것처럼 사용할 수 있는것
∘ 관리 기법 : Paging, Segmentation
[ Paging ]
∘ 프로세스를 고정길이의 페이즈로 나누어 물리메모리에 불연속적으로 저장하는 방식
∘ 외부단편화 해소 / 내부단편화 문제
∘ 메모리의 Frame 고정크기에 프로세스의 Page 고정크기를 저장
∘ 여러개로 흩어진 page에 CPU가 접근하기 위해 페이지 테이블을 통해 주소를 변환해야 한다.
[ Segmentation ]
∘ 프로세스를 가변길이의 세그먼트로 나누어 물리메모리에 저장하는 방식
∘ 내부단편화 해소 / 외부단편화 문제
∘ 세그먼트 테이븡릉 통해 할당
[ 단편화 ]
① 내부단편화 [ paging의 문제 ]
∘ 프로세스 크기가 페이지 크기의 배수가 아닐경우 마지막 페이지를 채울 수 없어 발생하는 공간
∘ 메모리 낭비의 원인이 된다.
② 외부단편화 [ segmentation의 문제 ]
∘ 프로그램의 크기보다 분할 크기가 작은경우 분할이 비어있음에도 프로그램을 적재하지 못하여 발생하는 공간
∘ 세그맨테이션으로 인해 비어있는 크기가 제각각이여서 프로그램을 적재할 수 없어 발생
∘ 해결방법
ⅰ. 압축 : 외부단편화 해소를 위해 프로세스 사용 공간을 한쪽으로 몰아 공간 확보 ⇨ 작업효율↓
ⅱ. Swapping : 메모리 안의 프로세스 주소공간 전체를 디스크 swap 영역으로 일시적으로 내려놓는것
[ 페이지 교체 알고리즘 ]
∘ 메모리가 가득차면 추가로 페이지를 가져오기 위해 안쓰는 페이지를 out 하고 현재 필요한 페이지를 in 해야 한다.
∘ 이를 효율적으로 처리하기 위한 알고리즘
∘ 종류
∘ FIFO : First In First Out
∘ 최적페이지 교체 알고리즘 : 앞으로 오랫동안 사용하지 않을 페이지 교체
∘ LRU : 최근에 사용하지 않은 페이지 교체
∘ LFU : 참조횟수가 가장 적었던 페이지 교체
[ 메모리 할당 알고리즘 ]
∘ First Fit : 메모리를 처음부터 검사해서 크기가 충분한 첫번째 메모리에 할당
∘ Next Fit : 마지막으로 참조한 메모리 공간에서부터 탐색을 시작해 공간을 찾음
∘ Best Fit : 내부 단편화를 최소화 하는 공간에 할당
[ Cache의 지역성 ]
∘ 캐시 메모리는 속도가 빠른 장치와 느린 장치간 속도차에서 발생하는 병목 현상을 줄이기 위한 메모리
∘ 캐시의 성능은 CPU가 이후에 참조할, 쓸모있는 정보가 어느 정도 들어있느냐에 따라 좌우 (Hit Rate)
∘ 적중률(Hit Rate)을 극대화하기 위해 데이터 지역성의 원리를 이용
① 시간 지역성 : 최근에 참조된 주소의 내용은 곧 다음에 다시 참조된다.
② 공간 지역성 : 대부분의 실제 프로그램이 참조된 주소와 인접한 주소의 내용을 참조한다.
[ 파일시스템 ]
∘ 컴퓨터에서 파일/자료를 쉽게 발견하도록 유지&관리하는 방법
∘ 커널영역에서 동작한다.
∘ 파일의 CRUD 기능을 원활히 수행하기 위함
∘ 역할 : 파일 관리 / 보조저장소 관리 / 파일무결성 매커니즘 / 접근방법 제공
∘ 구조
∘ META 영역 : 파일 이름/위치/크기/시간정보/삭제유무 등의 파일의 정보
∘ DATA 영역 : 파일의 데이터
'면접 > CS' 카테고리의 다른 글
알고리즘 [ Algorithm ] (1) | 2021.11.10 |
---|---|
자료구조 [ Data Structure ] (0) | 2021.11.10 |