운영체제
운영체제(Operating System)
일반적으로 커널(kernel)에 여러가지가 추가된 상태를 OS라고 통칭
-
커널(kernel) : 컴퓨터 자원(CPU, Memory, File, Network, IO Devices)을 관리
-
주요 운영체제: 윈도우, UNIX 계열 OS(Linux), MacOS
쉘(Shell)
- 사용자가 운영체제 기능과 서비스를 조작할 수 있도록 인터페이스를 제공하는 프로그램
- 터미널 환경(CLI)과 GUI 환경으로 분류
시스템 콜(System Call)
-
운영체제가 운영체제 각 기능을 사용할 수 있도록 시스템 콜이라는 명령 또는 함수를 제공
-
쉘에서 시스템콜을 이용하여 커널에 접근
API
- Application Programming Interface의 약자로 응용프로그램을 만들기 위한 함수 또는 라이브러리이다.
- API내부에는 필요시 해당 운영체제의 시스템콜을 호출하는 형태로 만들어짐
사용자 모드와 커널 모드
- 함부로 응용 프로그램이 전체 컴퓨터 시스템을 헤치지 못함
- 사용자 모드에서 커널 모드로 바로 접근 불가(사용자 모드 > 시스템콜 > 쉘 > 커널 순서로 접근)
운영체제 역할
- 시스템 자원(System Resource) 관리
- 사용자와 컴퓨터간의 커뮤니케이션 지원
- 응용 프로그램 제어
프로세스(Process)
- 실행 중인 프로그램은 프로세스라고 함
- 프로세스: 메모리에 올려져서 실행중인 프로그램
- 코드 이미지(바이너리): 실행 파일(Excel.exe)
- 응용 프로그램은 여러 프로세스로 구성 가능
- 스케쥴러: 커널안의 스케쥴러에서 프로세스 실행을 관리
프로세스 스케쥴링
- 배치처리 시스템: 한번에 등록된 여러 프로그램들을 실행 요청 순서에 따라 순차적으로 실행하는 시스템
- 단점1: 프로그램의 실행시간을 알 수 없다.
- 단점2: 동시에 여러 응용 프로그램을 실행시킬 수 없다.
-
시분할 시스템: 다중 사용자 지원을 위해 컴퓨터 응답 시간을 최소화 하는 시스템
- 멀티 태스킹: 단일CPU에서 여러 응용 프로그램이 동시에 실행되는 것처럼 보이도록 하는 시스템
- 멀티 프로그래밍: 최대한 CPU를 많이 활용하도록 하는 시스템
스케쥴링 알고리즘
- FIFO(First In First Out) 스케쥴링
- 가장 간단한 스케쥴링 알고리즘(배치 처리 시스템)
- FCFS(First Come First Served) 스케쥴러
- 자료구조 : Queue
- SJF(Shortest Job First) 스케쥴링
- 가장 프로세스 시간이 짧은 프로세스부터 먼저 실행을 시키는 알고리즘
- 자료구조 : Priority Queue, Heap
- 우선순위 기반 스케쥴러
- 정적 우선순위
- 프로세스마다 우선순위를 미리 지정
- 동적 우선순위
- 스케쥴러가 상황에 따라 우선순위를 동적으로 변경
- 정적 우선순위
- 라운드 로빈(Round-Robin) 스케쥴러
- 프로세스가 일정시간동안 완료 되지 않으면 남은 부분을 큐에 넣는다.
가끔 이야기가 나오는 용어 알아두기
- RTOS(RealTime OS): 응용 프로그램 실시간 성능 보장을 목표로 하는 OS
- 정확하게 프로그램 시작,완료 시작을 보장
- GPOS(General Purpose OS)
- 프로세스 실행시간에 민감하지 않고 일반적인 목적으로 사용되는 OS
- 예시: Windows, Linux 등
성능을 위해 체크해야하는 포인트
- IO-bound: IO관련 기능이 주로 사용하는 프로그램
- CPU-bound: CPU/메모리를 주로 사용하는 프로그램
프로세스 구조
- text(CODE): 코드
- data: 전역 변수/초기화된 데이터
- stack: 임시 데이터(함수 호출,로컬 변수 등)
- heap: 코드에서 동적으로 만들어지는 데이터 또는 객체
프로세스와 컴퓨터 구조
- PC(Program Counter) + SP(Stack Point)
- PC: 다음 실행할 코드 주소
- SP: 스택 최상단 주소
Java Garbage Collection와 프로세스 힙
- Java Garbage Collection이 필요한 이유
- 불필요한 객체가 차지하는 힙 공간을 삭제하여 힙 공간 확보가 필요하기 때문
- 만약 힙 공간이 부족하다면? 객체 생성이 불가능하고 Java와 같은 객체지향 프로그램은 동작하지 않게 됨
컨텍스트 스위칭(Context Switching)
- CPU에 실행할 프로세스를 교체하는 기술
- 컨텍스트 스위칭 동작
- 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서 메인 메모리에 저장
- 다음 실행할 프로세스 정보를 메인 메모리에 있는 PCB정보를 CPU의 레지스터에 넣고 실행
PCB(Process Control Block)
-
메모리의 별도 공간에 process 상태값들을 저장
-
PCB 저장내용: Process ID, Register(PC,SP 등), 프로세스 상태, 메모리 사이즈 등
IPC(InterProcess Communication)
- 프로세스 간 통신이 필요한 이유
- 성능을 높이기 위해 여러 프로세스를 만들어서 동시 실행
- 프로세스간 상태 확인 및 데이터 송수신 필요하지만 프로세스는 다른 프로세스의 공간에 접근 불가
- IPC는 프로세스간 통신 방법을 제공
- 대부분 IPC기법은 커널 공간을 활용(Message Queue, Shared Memory, Pipe)
스레드(Thread)
- 하나의 프로세스에 여러개의 스레드 생성 가능
- 스레드들은 동시에 실행 가능
- 프로세스 안에 있으므로 프로세스의 데이터를 모두 접근 가능
- 멀티 스레드(Multi Thread): 소프트웨어 병행 작업 처리를 위해 사용
Thread 장점
- 사용자에 대한 응답성 향상
- 자원 공유 효율
- 프로세스 안에 있으므로 프로세스의 데이터를 모두 접근 가능
- IPC 기법과 같이 프로세스간 자원 공유를 위해 번거로운 작업이 필요 없음
- 작업이 분리되어 코드가 간결
Thread 단점
- 스레드 중 한 스레드만 문제가 있어도 전체 프로세스가 영향을 받음
- 스레드를 많이 생성하면 Context Switching이 많이 일어나 성능 저하
- 동기화 이슈로 비정상적으로 동작가능
동기화(Syncronization) 이슈
- 동기화 : 작업들 사이에 실행시기를 맞추는 것
- 여러 스레드가 동일한 자원(데이터) 접근시 동기화 이슈 발생
- 동일 자원을 여러 스레드가 동시 수정 시 각 스레드 결과에 영향을 줌
동기화 이슈 해결 방안
임계 자원(Critical Resource): 동시에 읽고 쓰게 되는 데이터
임계 영역(Critical Section): 임계 자원이 포함된 코드를 가진 영역
-
Mutual exclusion(상호 배제)
- 어느 한 스레드가 공유 변수를 갱신하는 동안 다른 스레드가 동시 접근 할 수 없게 차단
- Mutex(binary semaphore)
- 임계 구역에 하나의 스레드만 들어갈 수 있음
- 세마포어(Semaphore)
- 임계 구역에 여러 스레드가 들어갈 수 있음
- Counter를 두어서 동시에 리소스에 접근할 수 있는 허용 가능한 스레드 수 제어
교착상태(Deadlock)
- 무한 대기 상태: 두 개 이상의 작업이 서로 상대방의 작업이 끝나기만을 기다리고 있기 때문에 다음 단계로 진행하지 못하는 상태
기아상태(Starvation)
- 특정 프로세스의 우선순위가 낮아서 원하는 자원을 계속 할당 받지 못하는 상태
가상 메모리(Virtual Memory System)
리눅스의 경우 하나의 프로세스가 4GB, 통상 메모리는 8GB, 16GB?
- 실제 메모리보다 많아 보이게 하는 기술
- 프로세스는 가상 주소를 사용하고 실제 해당 주소에서 데이터를 읽고 쓸때만 물리주소로 변경
- 가상 주소(Virtual Address): 프로세스가 참고하는 주소
- 물리 주소(Physical Address): 실제 메모리 주소
- MMU(Memory Management Unit): CPU에서 코드 실행 시 가장 주소 메모리 접근이 필요할 때 해당 주소를 물리 주소값으로 변환해주는 하드웨어 장치
페이징 시스템(Paging System)
- 크기가 동일한 페이지로 가상 주소 공간과 이에 매칭하는 물리 주소 공간을 관리
-
페이지 번호를 기반으로 가상 주소/물리 주소 매핑 정보를 기록/사용
- 페이지(Page) : 고정된 크기의 block
- 페이지 테이블(Page Table)
- 물리 주소에 있는 페이지 번호와 해당 페이지의 첫 물리주소 정보를 매핑한 표
- 가상주소 v = p(페이지번호), d(페이지 처음부터 해당위치까지의 거리)
- 페이징 시스템 동작
- 해당 프로세스의 페이지 테이블에 해당 가상주소가 포함된 페이지번호가 있는지 확인
- 페이지번호가 있으면 이 페이지가 매핑된 첫 물리주소를 찾음(P’)
- P’ + d 가 실제 물리주소
페이징 시스템과 MMU
- CPU는 가상 주소 접근시 MMU하드웨어 장치를 통해 물리 메모리 접근
- 프로세스 생성 시 페이지 테이블 정보 생성
- PCB 등에서 해당 페이지 테이블 접근 가능하고 관련 정보는 물리 메모리에 적재
- 프로세스 구동시 해당 페이지 테이블 base 주소가 별도 레지스터에 저장(CR3)
- CPU가 가상 주소 접근시 MMU가 테이블 base주소를 접근해서 물리 주소를 가져옴
TLB(Translation Lookaside Buffer)
- 페이지 정보 캐쉬
- MMU가 페이지 테이블이 저장되는 메모리를 가리키는 주소를 읽음
- 1번에서 찾은 물리주소를 바탕으로 데이터를 찾음
- 위와 같이 2번의 메모리 접근을 하는데 1번의 내용을 TLB에 저장하여 속도를 향상
요구 페이징(Demand Paging)
- 프로세스 모든 데이터를 메모리로 적재하지 않고 실행 중 필요한 시점에만 메모리로 적재함
페이지 폴트(Page fault)
- 어떤 페이지가 실제 물리 메모리에 없을 때 일어나는 인터럽트
- 운영체제가 page fault가 일어나면 해당 페이지를 물리 메모리에 올림
인터럽트
- CPU가 특정 기능을 수행하는 도중에 급하게 다른 일을 처리하고자 할 때 사용할 수 있는 기능
- 인터럽트는 미리 정의되어 각각 번호와 실행코드를 가리키는 주소가 기록되어있음
- IDT(Interrupt Descriptor Table): 부팅시 운영체제가 정해놓은 인터럽트 정보 저장소
스레싱(Thrashing)
- 반복적으로 페이지 폴트가 발생해서 과도하게 페이지 교체 작업이 일어나 실제로는 아무일도 하지 못하는 상황
페이지 교체 정책(Page Replacement Policy)
- 운영체제가 특정 페이지를 물리 메모리에 올리려 하는데 다 차있다면?
- 기존 페이지 중 하나를 물리 메모리에서 저장매치로 내리고(저장)
- 새로운 페이지를 해당 물리 메모리에 올림
- 페이지 교체 알고리즘
- FIFO(First In First Out): 가장 먼저 들어온 페이지를 교체
- OPT(Optimal): 앞으로 가장 오랫동안 사용하지 않을 페이지를 교체(구현 불가)
- LRU(Least Recently Used): 가장 오래 전에 사용된 페이지를 교체
- LFU(Least Frequently used): 가장 적게 사용된 페이지를 교체
- NUR(Not Used Recently): LRU와 마찬가지로 최근에 사용하지 않는 페이지부터 교체
- 각 페이지마다 참조비트(R), 수정비트(M)를 둠(R,M)
- (0,0), (0,1), (1,0), (1,1) 순으로 교체
파일 시스템
-
운영체제가 저장매체에 파일을 쓰기 위한 자료구조 또는 알고리즘
-
저장매체에 효율적으로 파일을 저장하는 방법
외부 단편화: 여유 공간이 여러 사이즈로 나뉘는 현상
- 가능한 연속적인 공간에 파일을 저장하는 방법
- 파일 사이즈 변경 문제로 불연속 공간에 파일 저장 기능 필요
- 블록 체인: 블록을 링크드 리스트로 연결
- 끝에 있는 블록을 찾으려면 맨 처음 블록부터 주소를 찾아가야함
- 인덱스 블록 기법: 각 블록에 대한 위치 정보를 기록해서 한번에 끝 블록을 찾아갈 수 있도록 함
- 블록 체인: 블록을 링크드 리스트로 연결
파일 시스템의 기본 구조
- 슈퍼 블록(Super Block): 파일 시스템 정보 및 파티션 정보 포함
- 아이노드 블록(Inode Block): 파일 상세 정보
- 데이터 블록(Data Block): 실제 데이터
Inode와 파일
- 파일 inode 고유값과 자료구조에 의해 주요 정보 관리
- 파일이름:inode 로 파일이름은 inode번호와 매칭
- 파일 시스템에서는 inode 기반으로 파일 엑세스
- inode 기반 메타 데이터(파일 권한, 소유자 정보, 파일 사이즈, 시간관련정보, 데이터 저장 위치 등) 저장
- 아래 그림처럼 Direct blocks보다 파일 용량이 클 경우 direct block 접근 주소를 담아서 보관
디렉토리 엔트리
- 디렉토리를 표현하는 데에 쓰이는 자료구조
- 디렉토리 안에 있는 파일/디렉토리 정보를 갖고 있음
가상 파일 시스템(Virtual File System)
- Network등 다양한 기기도 동일한 파일 시스템 인터페이스를 통해 관리 가능
- read/write 시스템 콜 사용(드라이버), 각 기기별 read_spec/write_spec 코드 구현
가상 머신(Virtual Machine)
- 하나의 하드웨어(CPU,Memory 등)에 다수의 운영체제를 설치하고, 개별 컴퓨터처럼 동작하도록 하는 프로그램
- Type1(Native 또는 Bare Metal)
- 하이퍼 바이저(or VMM(Virtual Machine Monitor)
- 운영 체제와 응용 프로그램을 물리적 하드웨어에서 분리하는 프로세스
- 하이퍼 바이저가 하드웨어에서 직접 구동(예: Xen, KVM)
- 하이퍼 바이저(or VMM(Virtual Machine Monitor)
- Type2
- 하이퍼 바이저가 HostOS 상위에 설치(예: VMWare, VirtualBox)
댓글남기기