커널
- 운영체제의 일부
- 하드웨어와 프로세스 운용을 위한 소프트웨어
- 디스크에 파일로써 존재하는 프로그램
- boot 프로그램에 의해 구동되며, 메모리에 상주됨
- 기본적으로는 프로세스와 파일 관리
- 모든 하드웨어를 관리, 응용 프로그램의 하드웨어 접근에 대한 통로 역할
- 입출력 장치 관리, 메모리 관리 및 시스템 호출 인터페이스 수행
- 운영체제의 복잡한 하드웨어 내부를 일관되고 추상적으로 볼 수 있도록 인터페이스 제공
- 스케줄링
- 기능
- 시스템 콜
- 인터페이스 어플리케이션에서 시스템으로 어떤 명령을 주고 싶을 때 사용
- 시스템 콜은 인터페이스를 통해서 전달됨
- 프로세스 관리
- 메모리 관리
- 네트워크 스택
- 네트워크의 데이터 입출력을 받아다가 어플리케이션으로 올려주기도 하고
- 어플리케이션의 데이터를 네트워크 장치를 통해서 송수신
- 파일 시스템 관리
- 파일 단위로 삭제 or 액세스 가능
- 장치 드라이버
- 장치용 인터페이스 제공
- 컴퓨터에 연결된 장치들을 드라이버라는 매개체를 통해 제어
- 시스템 콜
운영체제
- 사용자가 컴퓨터를 사용하기 위해 필요한 소프트웨어(편의 제공)
- 일반적으로 컴퓨터를 사용하면서 실행한 모든 프로그램들을 관리 및 제어
- 프로세스 관리, 메모리 관리, 디스크 관리
- 기능
- CPU 관리
- 쓰레드란, 프로세스 내에서 실행되는 흐름의 단위 / 스케쥴링의 기본 단위
- 여러 개의 쓰레드가 동시에 CPU 사용 요청 -> 이를 관리하는 것
- 우선순위 스케쥴링
- 적절하게 CPU사용을 할 수 있도록 시간을 배분해주는 것
- 디스크 관리
- 파일 단위로 -
- 참고자료 - https://velog.io/@codemcd/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9COS-1.-%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C%EB%9E%80
- CPU 관리
여기서부터는 프로세스와 쓰레드의 개념에 대해 다루어 보도록 할 것이다.
쓰레드
- 운영체제에서 프로세서 시간을 할당하는 기본 단위
- 명령어가 CPU를 통해서 수행되는 객체의 단위
- 디스패칭 단위
- 하나 이상의 쓰레드가 해당 프로세스 내에서 코드 실행 -> 프로그램 실행
- 하나의 프로세스에서 여러 개의 쓰레드 수행 가능
- 같은 프로세스 내에 있는 쓰레드는 같은 프로세스에 있는 자원과 상태 공유
- 예외처리기, 스케쥴링 우선순위, 쓰레드 컨텍스트 저장에 사용되는 구조 집합 유지 관리
- 쓰레드 컨텍스트는 실행을 다시 시작하기 위해 쓰레드에서 필요한 모든 정보를 쓰레드 호스트 프로세스의 주소 공간에 포함
- 필요성
- 하나의 프로세스 안에서 여러 개의 루틴을 동시에 수행하여 수행 능력을 향상시킬 때 사용
- 특징
- 독립적으로 수행 가능
- 쓰레드 자신이 자원을 보유
- 단일 CPU에서의 프로그램 구동 성능을 향상시킬 수 있는 기술
- 쓰레드의 사용은 시스템콜을 요청한 쓰레드만 블록되어 성능 향상시킬 수 있음
- (이와 반대로, 프로세스는 콜 작업 종료시까지 전체가 블록됨)
- 실행에 필요한 최소한의 정보만 가지고 있음
- 프로세스의 실행환경을 다른 쓰레드와 공유
- 각각의 쓰레드가 힙, 정적 자료, 코드 부분 공유
- but, 자기 자신만의 레지스터와 스택을 갖고 있음
- 실질적인 다중 처리 가능
- 스케쥴링
- 쓰레드 우선순위 스케쥴링
- 각각의 쓰레드에 특정한 범위의 우선순위 값이 주어지고, 스케쥴러 루틴은 실행 대기 중에 있는 쓰레드 중에서 우선순위 값이 제일 높은 쓰레드를 선택하여 실행하는 방식
- 쓰레드 우선순위 스케쥴링
- 생성
- 프로세스 생성시에 기본적으로 하나의 쓰레드가 생성됨
- 멀티 쓰레드
- 여러 개의 쓰레드를 사용해 동시에 여러 가지 루틴을 수행하는 개념
- 단일 프로세스 시스템의 효율성 증대
- 시스템 자원의 활용 극대화 및 처리량 증대
- 프로그램 복잡 - 쓰레드 동기화, 상호 작용 정의 복잡
프로세스
- 프로그램이 동작하는 상태
- 프로그램의 일부가 메모리로 올라가고 해당 명령어가 CPU에 의해서 동작되고 있는 것
- 구성요소
- 프로세스의 구조체에는 프로세스마다 독립적으로 관리해야 하는 유저 메모리 영역이나 프로세스가 사용하는 각종 객체들의 포인터를 관리하는 핸드 테이블 존재
- 유저 메모리 영역 관리
- 프로세스별로 독립적으로 유저 메모리 공간을 갖음
- 프로세스별로 독립적인 유저 메모리 영역을 관리하기 위해서 VAD 관리 테이블 존재
- VAD는 모든 유저 메모리의 할당 정보를 바이너리 트리 형태로 갖고 있음
- 핸드 테이블
- 프로세스에서 사용하는 모든 핸들들에 대한 커널 객체 포인터 정보를 배열 형태로 갖고 있는 공간
- 프로세스 종료시, 이 테이블을 참고하여 이 프로세서에서 사용하고 있는 모든 커널 객체 자동 반환
- 상태 - 실행, 준비, 대기 상태
- 프로세스 제어 블록
- 한 데이터 블록이나 레코드
<CPU 스케쥴링>
- 어떤 쓰레드가 어떤 우선 순위로 CPU를 얼만큼 사용할 것인지 결정 & 수행
- 시간당 처리되는 프로세스의 수를 높이고 CPU의 효율을 높임
- 공평성, 예측성 높임
- 무기한 연기 방지, 급격한 성능 저하 방지
- CPU 스케쥴링 단계 => 장기, 중기, 단기
- 단계에 따른 작업
- 장기 - 어느 작업을 등록하여 시스템 자원을 이용할 수 있게 할 것인지 결정
- 중기 - 어느 프로세스에게 메모리를 할당할 것인지 결정
- 단기 - 준비 상태의 프로새스들 중 어떤 것에 CPU를 할당할 것인지 결정
- 선점형 스케쥴링 VS 비선점형 스케쥴링
- 선점형 스케쥴링(Preemptive)
- 한 프로세스가 CPU를 차지하고 있을 때, 우선순위가 더 높은 다른 프로세스가 현재 프로세스를 중단시키고 자신이 CPU를 차지할 수 있게 하는 방식
- 높은 우선순위를 가진 프로세스들이 빠른 처리를 요구하는 시스템에서 유용
- 빠른 응답시간을 요구하는 시분할 시스템에 유용
- 높은 우선순위 프로세스들이 들어오는 경우 - > 오버헤드 초래 가능
- 문맥교환 수행
- 한 프로세스에서 다른 프로세스로 CPU가 새롭게 배당되는 교환과정
- 프로세스가 수행되다가 우선 순위가 더 높은 프로세스한테 비켜주면
- 지금까지 수행한 모든 내용 보관 and 새로운 내용 적재
- 보통 문맥 교환 시에 1 ~ 1000 마이크로 초까지 시간적인 오버헤드가 존재
- 최근의 많은 운영체제는 효율적인 문맥교환을 위해 쓰레드를 이용
- 비선점형 스케쥴링(Nonpreemptive)
- 한 프로세스가 CPU를 할당받으면 그 프로세스의 수행이 마칠 때까지 계속 점유하는 방식
- 한 프로세스가 CPU를 할당받으면 다른 프로세스는 CPU 사용 불가능
- 짧은 작업을 수행하는 프로세스가 긴 작업이 종료될 때까지 기다려야함
- 모든 프로세스들에게 공정 and 응답시간의 예측 가능
- 선점형 스케쥴링(Preemptive)
- 라운드 로빈 스케쥴링
- 스케쥴링이 들어오는 순서대로 CPU시간을 할당 받는 방식
- 각 프로세스는 같은 크기의 CPU시간을 할당받음
- 시분할 방식에 효과적
- 할당시간이 클 경우, FCFS와 같게 됨(==FIFO)
- 작을 경우, 문맥교환이 자주 발생됨
- SRT(Short Remaining Time) 스케쥴링
- 남은 수행 시간이 가장 짧은 것을 먼저 수행하는 방싟
- 선점형 방식
- 긴 작업은 SJF보다 대기 시간이 길다.
- 다단계 큐(Multilevel Queue) 스케쥴링
- 작업들을 여러 종류의 그룹으로 나누어 여러 개의 큐를 이용하는 기법
- 각 큐는 자신만의 독자적인 스케쥴링을 가짐
- 대화형, 배치(Background)등의 프로세스 성격에 따라 우선순위 부여
- 큐들 간의 프로세스 이동이 불가하기 때문에 스케줄링 부담이 적지만 유연성이 떨어짐
- 상위 단계 작업에 의해 하위 단계 작업이 선점 당함
- 우선순위가 낮은 프로세스가 오래 CPU 할당을 기다리는 기아 현상이 발생 가능
- 다단계 피드백 큐(Multilevel Feedback Queue) 스케쥴링
- 여러 개의 대기큐를 두고 각 큐마다 시간 할당량을 달리하는 스케쥴링 방식
- 입출력 위주와 CPU위주인 프로세스의 특성에 따라 서로 다른 CPU의 타임 슬라이스를 부여
- 짧은 작업에 유리
- 입출력 위주의 작업에 우선권 부여
- 하위 단계일수록 할당시간 커짐
- 처음 발생되는 프로세스는 시간 할당량이 가장 짧은 최상위 레벨의 큐에 위치
- 순서가 되어 프로세스가 주어진 시간 할당량만큼 CPU를 사용
- 주어진 시간 동안 끝나지 못하면, 그 다음 레벨의 큐에서 대기
- 위와 같은 방식으로 주어진 시간동안 못 끝내면 계속 아래 레벨로 이동
- 프로세스의 실행시간이 길수록 점점 더 낮은 순위의 레벨로 이동하면서 더욱 많은 시간 할당량의 큐로 이동
- 우선순위 스케쥴링
- 프로세스에게 우선순위 부여 후, 높은 우선순위대로 처리
- 우선순위가 동일할 경우, 선입 선처리(FCFS)로 처리됨 (먼저 들어온 것부터-)
- 우선순위 등급은 내부적 요인 / 외부적 요인으로 구분됨
- 내부적 - 작업처리의 제한 시간, 메인 메모리에 대한 요구량, 사용되는 파일의 수, 평균 CPU 버스트에 대한 평균 I/O 버스트의 비율을 고려하여 결정
- 외부적 - 기계외적 요인으로 인한 정책적 배려로 결정
- 우선순위가 높은 작업이 계속적으로 들어오게 될 때는 우선순위가 낮은 작업은 무한정 기다리게 되는 무한 정지 이거나 기아 상태가 될 수 있다는 단점 존재
- FIFO/FCFS 스케쥴링
- FIFO(First Input First Out) 알고리즘
- 가장 간단한 방식의 스케쥴링 기법
- 프로세스가 대기큐에 도착하는 순서에 따라 CPU를 할당하며, 프로세스가 CPU를 차지하고 난 후에는 그 프로세스가 CPU를 반환할 때까지 다른 프로세스가 선점할 수 없음
- 일괄처리 시스템에서 주로 사용
- 작업 완료 시간을 예측하기 용이
- 짧은 작업이 긴 작업을 기다리게 됨(불합리)
- 빠른 응답을 요구하는 대화식 시스템에서는 부적절
- 단독으로 사용되는 경우가 없으며 실제의 적용은 다른 스케쥴링 알고리즘에 보조적으로 사용
- HRN(Highest Response Ratio Next) 스케쥴링
- 대기중인 프로세스 중 현재 응답률이 가장 높은 것을 선택
- 긴 작업과 짧은 작업간의 지나친 불평등을 어느 정도 보완
- 짧은 작업이나 대기시간이 긴 작업은 우선순위가 높아짐
- SJF(Shortest Job First) 스케쥴링
- 준비 큐 내의 작업 중 수행시간이 가장 짧은 것을 먼저 수행
- FCFS보다 평균 대기 시간은 감소하지만 긴 작업은 무한연기 가능성 존재
- 짧은 작업에 유리
- CPU 버스트 길이를 비교하여 가장 작은 CPU 버스트를 가진 프로세스를 CPU 할당
- 준비 큐에 있는 프로세스의 CPU요구시간에 대한 정확한 정보를 얻기 어렵
- 비선점형 방식
- 기한부(Deadline) 스케쥴링
- 작업을 명시된 시간이나 기한내에 완료되도록 계획
- 작업시간이나 상황 등 정보를 미리 예측하기가 곤란
- SJF 와 SRT와의 차이 => https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=zersum&logNo=100189797200
- 참고 포스팅 => https://jhnyang.tistory.com/156
'IT 기술노트' 카테고리의 다른 글
IT기술노트 1. 컴퓨터의 시작 - 1.3 디스크 (0) | 2023.01.18 |
---|---|
IT기술노트 1. 컴퓨터의 시작 - 1.2 메모리 (0) | 2023.01.18 |
IT기술노트 1. 컴퓨터의 시작 - 1.1 컴퓨터를 구성하는 요소 (0) | 2023.01.17 |