사용자가 컴퓨터를 쉽게 다루게 해주는 인터페이스
운영체제의 역할
운영체제의 구조
유저프로그램 - GUI - 시스템콜 - 커널 - 드라이버 - 하드웨어
시스템 콜
운영체제가 커널에 접근하기 위한 인터페이스이며 유저 프로그램이 운영체제의 서비스를 받기 위해 커널 함수를 호출할 때 씁니다.
시스템콜은 하나의 추상화 계층이다. 그렇기 때문에 이를 통해 네트워크 통신이나 데이터베이스와 같은 낮은 단계의 영역 처리에 대한 부분을 많이 신경 쓰지 않고 프로그램을 구현할 수 있는 장점이 있다.
modebit
시스템 콜이 작동될 때 modebit을 참고해 유저 모드와 커널 모드를 구분한다.
플래그 변수로써 카메라 키보드 등 운영체제를 통해서 작동해야한다.
(1 - 유저모드 , 0 - 커널 모드)
컴퓨터의 요소
CPU
산술논리연산장치, 제어장치, 레지스터로 구성하며 인터럽트에 의해 명령어를 해석해서 실행
제어장치
CPU의 한 부품으로 입출력장치 간 통신 제어, 명렁어 읽고 해석, 데이터 처리를 위한 순서 결정.
레지스터
매우 빠른 임시기억장치를 가르킨다.
산술논리연산장치(ALU)
두 숫자의 산술 연산과 논리합, 곱 같은 연산을 계산하는 디지털 회로.
CPU의 연산 처리
1. 제어장치가 메모리에 계산할 값을 로드, 레지스터에도 로드
2. 제어장치가 레지스터에 있는 값을 계산하라고 ALU에 명령
3. 계산된 값을 다시 레지스터에서 메모리로 계산한 값을 저장
인터럽트
CPU를 잠깐 정지시키는 것을 의미
인터럽트가 발생되면 핸들러 함수가 모여 있는 인터럽트 벡터로 가서 인터럽트 핸들러 함수가 실행.
하드웨어 인터럽트
IO디바이스에서 발생하는 인터럽트
소프트웨어 인터럽트
트랩이라 부르며 프로세스 오류 등으로 프로세스가 시스템콜을 호출할 때 발동
DMA 컨드롤러
IO디바이스가 메모리에 직접 접근할 수 있도록 하는 하드웨어 장치. CPU의 부하를 막아주는 보조장치
메모리
전자회로에서 데이터나 상태, 명령어 등을 기록하는 장치를 말한다. CPU 는 계산 메모리는 기억을 담당
타이머
몇 초 안에 작업이 끝나야 한다는 것을 정하고 시간 제한을 다는 역할.
디바이스 컨트롤러
컴퓨터와 연결되어 있는 IO 디바이스들의 작은 CPU
메모리 계층
레지스터, 캐시, 메모리, 저장장치로 구성되어 있다.
캐시
데이터를 미리 복사해 놓는 임시 저장소이자 빠른 장치와 느린 장치에서 속도 차이에 따른 병목 현상을 줄이기 위한 메모리를 말한다.
지역성의 원리
시간 지역성
최근 사용한 데이터에 다시 접근하려는 특성이다.
공간 지역성
최근 접근한 데이터를 이루고 있는 공간이나 가까운 공간에 접근하는 특성
캐시히트와 캐시미스
캐시에서 원하는 데이터를 찾는다 - 캐시히트
캐시에 없어 주 메모리에서 찾는다 - 캐시미스
캐시 매핑은 캐시가 히트되기 위해 매핑하는 방법이다.
직접 매핑 - 메모리가 1~100 캐시가 1~10 이라면 1:1~10 이런식으로 매핑하는 것을 말한다 처리가 빠르지만 충돌이 잦음
연관 매핑 - 순서를 일치시키지 않고 관련 있는 캐시와 메모리를 매핑. 속도가 느리다.
집합 연관 매핑 - 앞선 두가지 매핑을 합쳐 놓앗다. 순서는 일치시키지만 집합을 둬서 저장하며 블록화되어 있기 때문에 검색은 좀 더 효율적이다.
웹 브라우저의 캐시
작은 저장소 쿠키, 로컬 스토리지, 세션 스토리가 있다. 이러한 것은 아이덴티티나 중복 요청 방지를 위해 쓰인다.
쿠키
만료기한이 있는 키-값 저장소.
로컬 스토리지
만료기한이 없는 키-값 저장소. 웹 브라우저에서는 사용할 수 없으며 클라이언트에서 수정.
세션 스토리지
만료기한이 없는 키-값 저장소. 탭 단위로 생성하며 닫을 때 데이터 삭제.
데이터베이스의 캐싱 계층
시스템 구축시 레디스 데이터베이스 계층을 캐싱 계층으로 둬서 성능을 향상 시키기도 한다.
가상 메모리
실제로 이용 가능한 메모리 자원을 추상화하여 큰 메모리처럼 보이게 만드는 것
가상 메모리는 속도 향상을 위해 TLB를 사용하는데 TLB는 속도를 향살 시킬 수 있는 캐시 계층이다.
스와핑
메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고 하드디스크의 일부분을 마치 메모리처럼 불러와 쓰는 것을 스와핑이라 한다.
페이지 폴트
프로세스의 주소 공간에는 존재 지금 램에는 없는 경우 발생한다.
페이지 폴트로 인한 스와핑 과정
1. CPU는 물리 메모리를 확인하여 해당 페이지가 없으면 트랩을 발생해서 운영체제에 알린다.
2. 운영체제는 CPU의 동작을 잠시 멈춥니다.
3. 운영체제는 페이지 테이블을 확인하여 가상 메모리에 페이지가 존재하는지 확인하고, 없으면 중단, 비어 있는 프레임을 찾는다. 물리 메모리에도 없다면 스와핑이 발동.
4. 비어 있는 프레임에 해당 페이지를 로드하고, 페이지 테이블을 최신화합니다.
5. 중단되었던 CPU를 다시 시작합니다.
스레싱
메모리의 페이지 폴트율이 높은 것을 의미.
작업 세트
과거 사용 이력인 지역성을 통해 결정된 페이지 집합을 만들어서 미리 메모리에 로드.
PFF
PFF는 페이지 폴트 빈도를 조정하는 방법으로 상한선과 하한선을 만드는 방법.
메모리 할당
시작 메모리 위치, 메모리의 할당 크기를 기반으로 할당.
고정 분할 방식은 메모리를 미리 나누어 관리하는 방식, 내부 단편화가 발생. 가변 분할 방식은 매 시점 프로그램의 크기에 맞게 동적으로 멤로리르 나눠 사용. 내부 단편화는 발생하지 않고 외부 단편화는 발생.
불연속 할당
메모리를 연속적으로 할당하지 않는 불연속 할당은 현대 운영체제가 쓰는 불연속 할당인 페이징 기법이 있다.
페이징은 동일한 크기의 페이지 단위로 나누어 메모리의 서로 다른 위치에 프로세스를 할당. 세그멘테이션은 페이지 단위가 아닌 의미 단위인 세그먼트로 나누는 방식이다. 페이지드 세그멘테이션은 공유나 보안을 의미 단위의 세그먼트로 나누고, 물리적 메모리는 페이지로 나누는 것을 말한다.
페이지 교체 알고리즘
메모리는 한정되어 있기 때문에 스와핑이 많이 일어난다.
오프라인 알고리즘 먼 미래에 참조되는 페이지와 현재 할당하는 페이지를 바꾸는 알고리즘이며 가장 좋은 방법이다!!
FIFO - 가장 먼저 온 페이지를 교체 영엑에 가장 먼저 놓는 방법
LRU - 가장 오래된 페이지를 바꾼다
NUR - LRU에서 발전한 알고리즘이 있다
LFU - 가장 참조 횟수가 적은 페이지를 교체한다
프로세스는 컴퓨터에서 실행되고 있는 프로그램
스레드는 프로세스 내 작업의 흐름
프로세스와 컴파일 과정
프로세스는 프로그램으로부터 인스턴스화 된 것을 의미한다.
전처리 소스 코드의 주석을 제거하고 헤더 파일을 병합하여 매크로를 치환한다.
컴파일러 오류 처리, 코드 최적화 작업을 하며 어셈블리어로 변환한다.
어셈블러 목적 코드로 변환된다.
프로세스의 상태
생성 상태
프로세스가 생성된 상태를 의미 fork()-주소 공간을 그대로 복사, exec()-새롭게 프로세스를 생성하는 함수를 통해 생성
대기 상태
메모리 공간이 충분하면 메모리를 할당받고 아니면 아닌 상태로 대기한다.
대기 중단 상태
메모리 부족으로 일시 중단된 상태
실행 상태
CPU 소유권과 메모리 할당받고 인스트럭션을 수행 중인 상태를 의미
중단 상태
어떤 이벤트가 발생한 이후 기다리며 프로세스가 차단된 상태
일시 중단 상태
메모리 부족으로 일시 중단된 상태
종료 상태
메모리와 CPU 소유권을 모두 놓고 가는 상태
프로세스의 메모리 구조
메모리 구조는 스택, 힙, 데이터 영역, 코드 영역으로 나눠진다.
스택은 지역변수, 매개변수, 함수가 저장되고 컴파일 시에 크기가 결정되면 동적이다 힙은 동적 할당할때 사용되며 런타임 시 크기가 결정된다. 데이터 영역은 정적은 특징을 갖는 프로그램이 종료되면 사라지는 변수가 들어 있는 영역이다. 코드영역은 프로그램에 내장되어 있는 소스 코드가 들어가는 영역이다.
PCB
운영체제에서 프로세스에 대한 메타데이터를 저장한 데이터를 말한다 프로세스 제어 블록이라고도 한다 프로세스가 생성되면 운영체제는 해당 PCB를 생성한다.
컨텍스트 스위칭은 PCB의 교환 과정을 말한다. 한 프로세스에 할당된 시간이 끝나거나 인터럽트에 의해 발생한다.
멀티프로세싱
여러 개의 프로세스, 즉 멀티프로세스를 통해 동시에 두 가지 이상의 일을 수행할 수 있는 것을 말한다. 웹 브라우저는 멀티프로세스의 구조를 가지고 있다.
IPC가 가능하며 IPC는 프로세스끼리 데이터를 주고받고 공유 데이터를 관리하는 메커니즘을 뜻한다.
공유메모리는 여러 프로세스에서 동일한 메모리 블록에 접근 권한이 부여되어 프로세스가 서로 통신할 수 있도록 공유 버퍼를 생성하는 것을 말한다.
익명 파이프는 프로세스 간에 FIFO 방식으로 읽히는 임시 공간인 파이피를 기반으로 데이터를 주고받으며, 단방향 방식의 읽기 전용, 쓰기 전용 파이프를 만들어서 작동하는 방식이다.
명명된 파이프는 통신을 위한 단방향 또는 이중 파이프를 말한다.
스레드와 멀티스레딩
스레드는 프로세스의 실행 가능한 가장 작은 단위
멀티스레딩은 프로세스 내 작업을 여러 개의 스레드, 멀티스레드로 처리하는 기법이며 스레드끼리 서로 자원을 공유하기 때문에 효율성이 높다!
공유 자원과 임계 영역
공유자원은 시스템 안에서 각 프로세스, 스레드가 함께 접근할 수 잇는 모니터, 프린터, 메모리, 파일, 데이터 등의 자원이나 변수 등을 의미한다. 이 공유 자원을 두 개 이상의 프로세스가 동시에 읽거나 쓰는 상황을 경쟁 상태라고 한다.
임계 영역은 둘 이상의 프로세스, 스레드가, 공유 자원에 접근할 때 순서등의이유로 결과가 달라지는 코드 영역을 말한다.
뮤텍스는 프로세스나 스레드가 자원을 lock 을 통해 잠금 설정하고 사용한 우에는 unlock을 통해 잠금 해제하는 객체이다.
세마포어는 일반화된 뮤텍스이다. 간단한 함수로 공유 자원에 대한 접근을 처리한다.
교착상태
두 개 이상의 프로세스들이 서로가 가진 자원을 기다리며 중단된 상태를 말한다.
원인
해결법
CPU 스케줄링 알고리즘
프로그램이 실행될 때는 CPU 스케줄링 알고리즘이 어떤 프로그램에 CPU 소유권을 줄 것인지 결정한다.
비선점형 방식
프로세스가 스스로 CPU 소유권을 포기하는 방식이다.
FCFS는 가장 먼저 온 것을 가장 먼저 처리하는 알고리즘
SJF는 실행 시간이 가장 짧은 프로세스를 가장 먼저 실행하는 알고리즘
우선순위 우선순위를 높이는 방법을 통해 단점을 보완한 알고리즘
선점형 방식
지금 사용중인 프로세스를 알고리즘으로 중단시키고 강제로 다른 프로세스에 소유권을 할당시킨다.
라운드 로빈(RR)은 각 프로세스는 동일한 할당 시간을 주고 그 시간 안에 끝나지 않으면 다시 준비 큐의 뒤로 가는 알고리즘이다.
SRF 실행 중 더 짧은 작업이 들어오면 수행하던 프로세스를 중지하고 해당 프로세스를 수행하는 알고리즘이다.
다단계 큐는 우선순위에 따른 큐를 여러 개 사용하고, 큐마다 다른 스케줄링 알고리즘을 적용하는 것이다.