운영체제(Operating System)는 커널(Kernal)에 여러가지 추가된 상태를 통칭함.
주요 OS - Window, UNIX계열 OS(리눅스), MacOS
시스템 콜(System Call)
파일, 네트워크 등 처리하는 함수 제공하는 시스템 호출 인터페이스.
커널은 시스템 콜을 제공, 쉘은 시스템 콜을 사용하여 사용자가 커널의 기능을 사용할 수 있다.
API(Application Programming Interface)
함수나 라이브러리 형태로 제공.
API 내부에는 시스템콜을 호출하는 형태로 만들어지는 경우가 대부분이다. (필요 시 해당 OS의 시스템 콜을 호출)
쉘(Shell)
사용자가 OS를 조작할 수 있도록 인터페이스 제공하는 프로그램(CLI, GUI 환경 제공)
CPU 권한 모드(CPU Protection Ring)
사용자 모드: 응용 프로그램이 사용
커널 모드: OS가 사용
운영체제 스케줄링(OS Scheduling)
- 시분할 시스템: 다중 사용자 지원을 위해 컴퓨터 응답 시간을 최소화하는 시스템
- 멀티 태스킹: 단일 CPU에서 여러 응용 프로그램이 동시에 실행되는 것처럼 보이도록 하는 시스템 / 10~20ms(1000ms는 1초) 단위로 실행 응용 프로그램이 바뀜
- 멀티 프로세싱: 여러 CPU에 하나의 프로그램을 병렬로 실행해서 실행속도를 극대화시키는 시스템
- 멀티 프로그래밍: CPU활용도를 극대화하는 스케줄링 알고리즘
스케줄링 알고리즘(Scheduling Algorithm)
프로세스(Process) : 메모리에 올려져서, 실행 중인 프로그램. / 응용 프로그램은 여러 개의 프로세스로 이루어질 수 있다. / 프로세스 실행을 관리하는 것이 스케줄러.
스케줄링 알고리즘 종류
- FIFO: 배치 처리 시스템 같은 가장 간단한 알고리즘 (FCFS - First Come First Served)
- SJF: 최단 작업 우선 스케줄러 / 가장 프로세스 실행시간이 짧은 프로세스부터 먼저 실행 시키는 알고리즘
- 우선순위 기반(Priority-Based): 정적(프로세스마다 우선순위를 미리 지정) / 동적(스케줄러 상황에 따라 우선순위 변경) 우선순위
- Round Robin: 시분할 시스템 기반
프로세스 상태(Process State)
running state: 현재 CPU에서 실행 상태
ready state: 실행 준비 상태
block state: 특정 이벤트 발생 대기 상태
프로세스 구조
PC와 SP 레지스터
PC(Program Counter): 다음 실행할 코드 주소
SP(Stack Pointer): 스택 최상단 주소
프로세스 구성 요소
code - 코드
data - 변수, 초기화된 데이터
stack - 함수 호출, 로컬 변수 등 임시 데이터
heap - 코드에서 동적으로 만들어지는 데이터
컨텍스트 스위칭(Context switching)
CPU에 실행할 프로세스를 교체하는 기술 / PCB 정보(PC, SP)를 CPU 레지스터에서 바꿔준다.
✒︎ Process Control Block(PCB): Process ID, Register(PC, SP 등)등 프로세스가 실행 중일 상태를 구조화하여 저장한다.
멀티 프로세스
프로세스는 다른 프로세스 공간에 접근할 수 없다. 따라서 프로세스 간 통신을 위해 여러 프로세스를 만들어 동시 실행한다.
이때 프로세스 간 상태 확인 및 데이터 송수신이 필요하다.
IPC(InterProcess Communication)는 프로세스간 통신 방법을 제공한다.
IPC 기법에는 file, Message Queue, Shared Memory, Pipe, Signal, Semaphore, Socket 등이 있다.
대부분 IPC 기법은 커널 공간을 공유하여 활용 - 어떤 프로세스나 0~4GB 까지의 메모리 주소를 가지는데 3~4GB는 커널 공간이다.
스레드(Thread)
Light Weight Process 라고도 한다. 프로세스는 각 프로세스의 데이터 접근이 불가하지만 스레드는 하나의 프로세스에 여러개의 스레드를 생성하고 스레드들은 동시에 실행 가능하다. 프로세스 안에 있어 프로세스의 데이터에 접근 할 수 있다.
스레드 장점
1. 카톡처럼 사용자에 대한 응답성, 성능 향상
2. 프로세스 안에 스레드가 여러개가 있기 때문에 자원 공유 효율이 높음.
스레드 단점
1. 스레드 중 하나의 스레드만 문제가 있어도 전체 프로세스가 영향을 받음.
2. 스레드를 많이 생성하면 Context Switching이 많이 일어나 성능이 저하됨.
3. 동기화 이슈로 비정상적으로 동작 가능 - 동기화 코드를 적절히 추가해줘야함.
*동기화(Synchronization) 이슈
동기화란 작업들 사이에 실행 시기를 맞추는 것이다. 여러 스레드가 동일한 데이터에 접근,수정 시 동기화 이슈가 발생한다.
동기화 이슈 해결방안 -
Mutual exclusion(상호 배제) : 특정 데이터를 변경하려 할때 다른 스레드가 동작하지 못하도록 막는 기법
✒︎ 임계 자원(critical resource), 임계 영역(critical section)에 대한 접근을 막기 위해 앞 뒤에 locking 기법 관련 코드를 작성하여 해결한다.
[locking 기법 1] Mutex(binary semaphore) : 임계구역에 하나의 스레드만 들어갈 수 있다.
[locking 기법 2] Semaphore : 임계구역에 여러 스레드가 들어갈 수 있다. counter를 두어서 동시에 리소스에 접근 할 수 있는 허용 가능한 스레드 수를 제어
Mutex 기법을 잘못쓰면 데드락 상태에 빠질 수 있다.
- 교착상태(Deadlock)
무한 대기 상태 : 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 기다리고 있기때문에 다음단계로 넘어가지 못함.
- 기아상태(Starvation)
특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태
가상 메모리(Virtual Memory System)
프로세스 간 공간을 분리하여 메모리가 실제 메모리보다 많아 보이게 하는 기술
- 프로세스는 가상 주소를 사용하고, 실제 해당 주소에서 데이터를 읽고 쓸때만 물리 주소(Physical Memory, RAM)로 바꿔준다.
* MMU(Memory Management Unit):
CPU가 가상 주소 메모리를 주면 해당 주소를 물리주소 값으로 변환하여 다시 CPU에 전달하는 하드웨어 장치
(가상주소와 물리주소를 맵핑은 빈도수가 잦아 MMU라는 별도의 하드웨어 칩으로 성능을 향상시킴)
페이징 시스템(paging system)
- 페이징(paging) : 크기가 동일한 page로 메모리에 올렸다 내렸다하면서 가상 주소 공간과 물리 주소 공간을 매핑하는 시스템
(Intel에선 4KB, 2MB, 1GB paging 지원 / 리눅스는 4KB로 paging 함.)
- 페이지 테이블(page table) : 물리 주소에 있는 페이지 번호와 해당 페이지의 첫 물리 주소 정보를 매핑한 표
CPU는 가상 주소 접근시 MMU 하드웨어 칩을 통해 물리 메모리에 접근하고 프로세스 생성시 페이지 테이블 정보를 생성한다. PCB 같은 레지스터에서 해당 페이지 테이블에 접근하고 관련 정보는 물리 메모리에 적재한뒤 CPU에 데이터를 전달한다.
페이징 시스템에서 MMU가 물리주소를 확인하기 위해 메모리를 갔다 와야하는데, 이 시간을 단축시키기 위해 TLB 활용
* TLB(Translation Lookaside Buffer) : 페이지 정보 캐쉬(최근 접근한 가상 메모리에 대한 물리주소 정보를 저장하고 있음)
- 공유 메모리(IPC) : 프로세스간 동일한 물리 주소를 가리킬 수 있다. (공간 절약, 메모리 할당 시간 절약)
- 요구 페이징(Demand Paging) : 프로세스 모든 데이터를 메모리로 적재 하지 않고, CPU가 요청할 때 비로소 페이지를 메모리에 적재한다.
- 페이지 폴트(page fault) : 어떤 페이지가 실제 물리 메모리에 없을 때 일어나는 인터럽트
인터럽트는 미리 정의되어 각각 번호와 OS 내부 코드를 가리키는 주소가 특정 메모리인 IDT(Interrupt Descriptor Table)에 기록된다. 페이지 폴트가 빈번하면 시간이 오래 걸리는 단점이 있어 페이지 교체 정책이 대안이 될 수 있다.
페이지 교체 정책(page replacement poiicy)
OS가 특정 페이지를 물리 메모리에 올리려 할 때, 물리메모리가 꽉 차있다면 기존 페이지 중 하나를 저장 매체로 저장하고 새로운 페이지를 해당 물리 메모리 공간에 올린다. 어떤 페이지를 물리 메모리에서 저장 매체로 내릴지 결정하는 알고리즘이다.
- FIFO 알고리즘 : 가장 먼저 들어온 페이지를 내림
- OPT 알고리즘 : 앞으로 가장 오랫동안 사용하지 않을 페이지를 내림
- LRU 알고리즘 : 가장 오래전에 사용된 페이지를 내림(메모리 지역성), NUR 알고리즘(각 페이지마다 Read, Write 체크)와 비슷
- LFU 알고리즘 : 가장 적게 사용된 페이지를 내림
* 스레싱(Thrashing) : 반복적인 페이지 폴트로 과도한 페이지 교체 작업이 일어나 실제로 아무일도 하지 못하는 상황(메모리를 늘리거나 실행 프로그램을 줄이는 방법으로 해결)
파일 시스템
OS가 저장매체의 파일을 쓰기위한 자료구조 혹은 알고리즘
리눅스(UNIX계열) - 일종의 인덱스 블록 기법인 inode 파일 시스템
가상 파일 시스템(Virtual File System)
리눅스(유닉스) OS는 모든 인터렉션(네트워크, 마우스, 키보드 포함)은 파일을 read/write 시스템콜로 이루어져있다.
모든 자원에 대한 추상화 인터페이스로 파일 인터페이스를 활용한다.
inode 파일 시스템 기본구조
- 수퍼 블록 : 파일 시스템 정보 및 파티션 정보 포함
- 아이노드 블록 : 파일 상세 정보
- 데이터 블록 : 실제 정보
리눅스 OS : 리눅스 커널(운영체제) + 시스템 프로그램(쉘) + 응용 프로그램
안드로이드 스마트폰 (Android) : Linux Kernel + (Shell + Some basic programs) + Andorid Framework
출처:
https://www.fun-coding.org/syscall.html#gsc.tab=0
잔재미코딩 온라인 강의 사이트입니다
잔재미코딩에서 만든 온라인 강의 리스트를 공유하는 웹페이지입니다.
www.fun-coding.org