실행되고 있는 프로그램
스레드(Thread)
프로세스에서 돌아가는 경량 프로세스이다
실행 중인 프로세스 안에 여러 개의 스레드가 들어가 있고 공유자원들(데이터, 힙 영역, 코드) 공유하면서
각자가 가지고 있는 스택(Stack) 영역(나만 가지고 있는 지역변수)들이 존재
메모리상의 프로세스 영역
①코드 영역:프로그램을 짠 거
②데이터 영역:프로그램이 종료되기 전까지 계속 상주하는 전역 변수, 정적 변수
③힙 영역:프로그래머가 동적으로 할당해주는 것(씨 언어에서 멀록 함수
④스택 영역:지역변수 들어가는 것(임시적으로 사용되는 것들이 들어가는 것)
프로세스 상태 전이☆
생성:프로그램 더블클릭 후 메모리에 올라가는 것
준비:큐
실행:CPU에서 처리(디스패치 <->타임 런 아웃)
대기:가장 중요한 입출력이 들어오면 지금 현재 있는 것들을 잠깐 대기 상태로 뺀다
Spooling:모았다가 처리하는 것
문맥 교환(Context Switching):PCB에 저장해 놓고 동시에 여러 개가 수행되는 것처럼 보이게 문맥 교환은 멀티태스킹이 가능하게 해 줌(여러 개의 프로그램이 동시에 돌아가게)
PCB(Process Control Block):프로세스가 어디까지 처리되었는지 저장하고 있는 것(각각의 프로세스가 PCB를 가지고 있다)/PCB가 있어야 문맥 교환이라는 것이 가능하다
ex) 공유 아이디, 어디까지 처리, 변수가 어떤 값인지, 공유 아이디
프로세스 스케줄링
메모리에 올라온 프로세스들 중 어떤 프로세스를 먼저 처리할지 순서를 정하는 것
스케줄링 성능 척도
운영체제에서 성능 척도를 생각하면 다 비슷하다
처리량
사용률
반환시간
가용성
스케줄링 기법
①선점형 스케줄링(preemptive)
cpu를 강제로 뺏을 수 있는 권한이 운영체제에 있음(윈도우같은경우)
cpu 처리 시간이 긴 프로세스가 독점하는 것을 막을 수 있어 요즘은 대부분 선점형
잦은 문맥 교환으로 오버헤드(일처리가 많음)가 발생
ex) Round Robbin, SRT, 다단계 큐, 다단계 피드 백큐
②비선점형 스케줄링(Non-Preemptive)
프로세스가 cpu를 점유하고 있으면 뺏을 수 없는 방식
ex) FCFS, SJF, HRN, 우선순위, 기한부
스케줄링 알고리즘
선점형 기법
①Round Robin: 시간 단위로 cpu할당
②SRT(Shortest Remaining Time)
(SJF기법:실행시간이 빠른 순서대로 함)
SJF기법 변경한 시간이 짧은 프로세스에게 먼저 cpu를 할당
기아 현상이 발생할 수 있음(2시간짜리 이런 것들)
③다단계 큐(MQ, Muti-level Queue)
우선순위에 맞게 해당 큐에 넣어 처리
다단계 피드백 큐(Muti-level Feedback Queue)
처리를 못했을 경우 다음으로 넘기는 것
각각의 큐에 타임슬라이스를 할당(시간을 정해줌)
맨 마지막으로 들어가면 Round Robin으로 처리
(마냥 기다리고 있다가 다처리되면 라운드 로빈으로 처리)
다단계 큐랑 다단계 피드백큐는 종류 정도만 나옴
비 선점형 기법
①FCFS(First Come, Frist Serve)
가장 먼저 들어온 것이 가장 먼저 처리
최대평균시간=가장오래걸리는 것들을 먼저 집어넣어 반환시간의 평균을 구함
최소평균시간=가장빠른거 먼저 집어넣어 반환시간의 평균을 구함
②SJF(Shortest Job First)
실행 시간이 빨은 순서대로함
(SRT는 계속 빼내어 짧은 것을 집어넣음)
③HRN(Highest Response Ratio Next)
대기 시간에 중점을 줌
우선순위(계산해서 값이 높은 순)=(대기시간+실행시간)/실행시간
④우선순위(Priority)
우선순위를 주어 우선순위가 높은 프로세스 전저 처리
⑤기한부(Deadline)
라운드로빈과 비슷하여 기한을 정해 처리
(라운드로빈가 다르게 그 시간안에 처리를 못하면 다시 시작한다)
댓글