프로세스 스케줄링

2022. 6. 10. 15:38정처기(필기)/프로그래밍언어활용

더보기

(1) 프로세스

1. 프로세스의 개념

- 프로세스란 CPU에 처리되는 실행 중인 프로그램을 의미하며, 작업 또는 태스크라고도 한다. 

- 하나의 프로세스는 여러 가지 이벤트에 의해 서로 구분되는 상태 변화를 겪는다.

- 생성 상태, 준비 상태, 실행 상태, 대기 상태, 완료 상태가 있다. 

 

 

2. 프로세스 구성

프로세스 구성요소 설명
사용자 작성 코드 사용자가 작성한 프로그램 코드
사용자 사용 데이터 사용자 작성 프로그램 코드에서 사용하는 데이터
프로세스 제어 블록 운영체제가 프로세스 관리를 위해 필요한 자료를 담고 있는 자료 구조
스택 함수 호출 및 인자 전송에 사용

 

3. 스레드

- 스레드는 프로세스보다 가벼운, 독립적으로 수행되는 순차적인 제어의 흐름이며, 실행 단위

- 스레드는 프로세스에서 실행 제어만 분리한 실행 단위로, 한 개의 프로세스는 여러 개의 스레드를 가질 수 있다. 

- 사용자 수준의 스레드 : 사용자가 만든 라이브러리를 사용하여 스레드를 운용(속도는 빠르지만 구현이 어려움)

- 커널 수준의 스레드 : 운영체제의 커널에 의해 운용되는 스레드(구현은 쉽지만 속도가 느림)

 

 

4. 프로세스 상태 전이

- 하나의 작업이 컴퓨터 시스템에 입력되어 완료되기까지 프로세스의 상태가 준비, 실행 및 대기 상태 등으로 변하는 활동

 

▼ 프로세스 상태 전이 종류

  • 디스패치 : 준비 상태에 있는 여러 프로세스 중 실행될 프로세스를 선정하여 CPU를 할당, 준비 상태에서 실행 상태로 전이
  • 할당 시간 초과 : CPU를 할당받은 프로세스는 지정된 시간이 초과되면 스케줄러에 의해 PCB 저장, CPU 반납 후 다시 준비 상태로 전이됨(실행 상태에서 준비 상태로 전이)
  • 입출력 발생(Block) : 실행 상태에 있는 프로세스가 지정된 할당 시간을 초과하기 전에 입출력이나 기타 사건이 발생하면 CPU를 스스로 반납하고 입출력이 완료될 때까지 대기 상태로 전이됨(실행 -> 대기)
  • 깨움(Wake-up) : 입출력이 종료되면 대기 상태의 프로세스에게 입출력 종료사실을 wait& signal 등에 의해 알려주고, 준비 상태로 전이(대기 -> 준비)

 

5. 프로세스 스케줄링

- CPU를 사용하려고 하는 프로세스들 사이의 우선순위를 관리하는 작업

 

▼프로세스 스케줄링 주요 용어

  • 서비스 시간 : 프로세스가 결과를 산출하기까지 소요되는 시간
  • 응답시간 : 프로세스들이 입력되어 서비스를 요청하고, 반응하기 시작할 때까지 소요되는 시간
  • 반환시간 : 대기시간 + 수행시간
  • 대기시간 : 프로세스가 프로세서에 할당되기까지 큐에 대기하는 시간
  • 평균 대기시간 : 프로세스가 대기 큐에서 대기하는 평균 시간
  • 종료 시간 : 요구되는 Processing time을 모두 수행하고 종료된 시간
  • 시간 할당량 : 한 프로세서가 프로세서를 독접하는 것을 방지하기 위해 서비스되는 시간 할당량
  • 응답률 : (대기시간 + 서비스시간) / 서비스시간

 

① 프로세스 스케줄링 유형

[1] 선점형 스케줄링

- 하나의 프로세스가 CPU를 차지하고 있을 때, 우선순위가 높은 다른 프로세스가 현재 프로세스를 중단시키고 CPU를 점유하는 방식

- 비교적 응답이 빠르나 높은 우선순위 프로세스들이 들어오면 오버헤드가 발생한다

- 알고리즘으로는 SRT, 다단계 큐(MLQ), 다단계 피드백 큐(MLFQ), 라운드 로빈이 있다.

- 실시간 응답환경에 사용된다.

 

  • 라운드 로빈 : 프로세스는 같은 크기의 CPU 시간을 할당, 프로세스가 할당된 시간 내에 처리 완료를 못하면 준비 큐 리스트의 가장 뒤로 보내지고, CPU는 대기 중인 다음 프로세스로 넘어감(시분할 시스템, 균등한 CPU 점유 시간)
  • SRT : 가장 짧은 시간이 소요되는 프로세스를 먼저 수행, 남은 처리 시간이 더 짧다고 판단되는 프로세스가 준비 큐에 생기면 언제라도 프로세스가 선점됨
  • MLQ : 작업들을 여러 종류 그룹으로 분할, 여러 개의 큐를 이용하여 상위단계 작업에 의한 하위단계 작업이 선점당함(자신만의 독립적인 스케줄링 가짐)
  • MLFG : 입출력 위주와 CPU 위주인 프로세스의 특성에 따라 큐마다 서로 다른 CPU 시간 할당량을 부여

 

[2] 비선점형 스케줄링 

- 한 프로세스가 CPU를 할당 받으면 작업 종료 후 CPU 반환 시까지 다른 프로세스는 CPU 점유가 불가능한 스케줄링 방식

- 응답시간 예상이 용이, 모든 프로세스에 대한 요구를 공정하게 처리

- 처리시간 편차가 적은 특정 프로세스 환경

  • 우선순위 : 각 프로세스 별로 우선순위가 주어지고, 우선순위에 따라 CPU를 할당함(주요/긴급 프로세스에 대한 우선처리)
  • 기한부(Deadline) : 작업들이 명시된 시간이나 기한 내에 완료되도록 계획
  • FCFS(First Come, First Served) : 프로세스가 대기 큐에 도착한 순서에 따라 CPU를 할당함
  • SJF(Shortest Job First) : 프로세스가 도착하는 시점에 따라 그 당시 가장 작은 서비스 시간을 갖는 프로세스가 종료 시까지 자원 점유(기아 현상 발생)
  • HRN : 대기시간이 긴 프로세스일 경우 우선순위가 높아지게 하여 우선순위를 결정하는 스케줄링 기법(기아 현상 최소화 기법) 

6. 프로세스 관리-교착상태

[1] 교착상태

- 다중프로세싱 환경에서 두 개 이상의 프로세스가 특정 자원할당을 무한정 대기하는 상태

  • 상호배제 : 프로세스가 자원을 배타적으로 점유하여 다른 프로세스가 그 자원을 사용할 수 없는 상태
  • 점유와 대기 : 한 프로세스가 자원을 점유하고 있으면서 또 다른 자원을 요청하여 대기하고 있는 상태
  • 비선점 : 한 프로세스가 점유한 자원에 대해 다른 프로세스가 선점할 수 없고, 오직 점유한 프로세스만이 해제 가능한 상태
  • 환형 대기 : 두 개 이상의 프로세스 간 자원의 점유와 대기가 하나의 원형을 구성한 상태

 

[2] 교착상태 해결방법

  • 예방 : 상호배제를 제외한 나머지 교착상태 발생조건을 위배하는 방안(점유 자원 해제 후 새 자원 요청)
  • 회피 : 안전한 상태를 유지할 수 있는 요구만 수락(은행가 알고리즘, Wound-Wait, Wait-Die)
  • 발견 : 시스템의 상태를 감시 알고리즘 통해 교착 상태 검사(자원할당 그래프)
  • 복구 : 교착상태가 없어질 때까지 프로세스를 순차적으로 Kill하여 제거, 희생자 선택해야 하고 기아 상태 발생

[3] 디스크 스케줄링

- 사용할 데이터가 디스크상의 여러 곳에 저장되어 있을 경우, 데이터를 액세스하기 위해 디스크 헤드를 움직이는 경로를 결정하는 기법

 

▼ 디스크 스케줄링 종류

  • FCFS(First Come First Served) : 디스크 대기 큐에 가장 먼저 들어온 트랙에 대한 요청을 먼저 서비스하는 기법
  • SSTF(Shortest Seek Time First) : 현재 위치에서 탐색거리가 가장 짧은 트랙에 대한 요청을 먼저 서비스하는 기법
  • SCAN : 현재 헤드의위치에서 진행 방향이 결정되면 탐색 거리가 짧은 순서에 따라 그 방향의 모든 요청을 서비스하고, 끝까지 이동한 후 역방향의 요청 사항을 서비스하는 기법
  • C-SCAN(Circular SCAN) : 항상 바깥쪽에서 안쪽으로 움직이며 가장 짧은 탐색 거리를 갖는 요청을 서비스하는 기법
  • LOOK : SCAN을 기초로 사용하는 기법으로 진행 방향으로 더 이상의 요청이 없으면 역방향으로 진행하는 기법
  • N-STEP SCAN : SCAN 기번을 기초로 하여 어떤 방향의 진행이 시작될 당시에 대기 중이던 요청들만 서비스하고, 진행 도중 도착한 요청들은 한꺼번에 모아서 다음의 반대 진행 방향으로 진행할 때 서비스하는 기법
  • SLTF : 섹터 큐잉이라고 하며, 회전지연시간 최적화를 위해 구현된 기법

 

더보기

(2) 환경 변수

1. 환경 변수 개념

- 프로세스가 컴퓨터에서 동작하는 방식에 많은 영향을 미치는 동적 값들의 모임

 

프로그램을 찾는 기본 경로 명령어(도스, 윈도우즈) : echo %PATH%

유닉스 쉘에서의 프로그램을 찾는 기본 경로 명령어 : echo $PATH

 

2. 환경 변수 설정법

- 도스와 윈도우즈에서 SET 명령어를 변수 없이 사용하면 모든 환경 변수, 그에 따른 모든 값을 보여줌

SET 변수 = 값

 

- 유닉스에서는 env, set, printenv 명령어들을 변수 없이 사용하면, 모든 환경 변수 및 그에 따른 모든 값을 보여줌

  • env : 전역 변수 설정 및 조회
  • set : 사용자 환경 변수 설정 및 조회
  • export : 사용자 환경 변수를 전역 변수로 설정

 

3. 윈도우즈 운영체제의 환경변수

  • %ALLUSERSPROFILE% -> 모든 사용자 프로필이 저장된 폴더
  • %APPDATA% -> 설치된 프로그램의 필요 데이터가 저장된 폴더
  • %CommonProgramFiles% -> CommonFiles 보여줌
  • %ComSpec% -> 기본 명령 프롬프트 프로그램
  • %HOMEPATH% -> 로그인한 사용자 계정의 root 폴더
  • %Path% -> 실행 참조용 폴더 지정 목록
  • %ProgramFiels% -> 기본 프로그램 설치 폴더
  • %USERNAME% -> 로그인한 계정 이름
  • %WINDIR% -> 윈도우즈가 깔린 폴더
  • %SystemDrive% -> 윈도우가 부팅된 드라이브
  • %SystemRoot% -> 부팅된 운영체제가 들어있는 폴더

4. 리눅스/유닉스 운영체제의 환경변수

  • $PATH : 콜론으로 구분된 디렉토리 목록을 포함하며 쉘은 이름에 슬래시(/)가 포함되지 않는 명령을 검색
  • $HOME : 사용자의 홈 디렉토리의 위치를 포함
  • $PWD : 현재 디렉토리의 절대 경로명
  • $DISPLAY : X1 프로그램이 기본적으로 사용할 디스플레이 식별자를 포함
  • $SHELL : 로그인 쉘의 절대 경로명
  • $USER : 사용자 이름
  • $TERM : 터미널 종류의 이름

 

더보기

(3) 쉘 스크립트

- 쉘이나 명령 줄 인터프리터에서 돌아가도록 작성되었거나 운영체제를 위해 사용되는 스크립트

- 대부분의 쉘 스크립트는 파일 확장자를 지나지 않는다. 

 

1. 운영체제 기본명령어

- CLI(직접 명령어 입력)와 GUI(마우스로 화면을 클릭하여 그래픽으로 제어)가 있다. 

 

  • ATTRIB : 파일 속성을 표시하거나 바꿈
  • CALL : 한 일괄 프로그램에서 다른 일괄 프로그램을 호출
  • CD : 현재 디렉토리 이름을 보여주거나 바꿈
  • CHKDSK : 디스크를 검사하고 상태 보고서를 표시
  • CLS : 화면을 지움
  • COPY : 하나 이상의 파일을 다른 위치로 복사
  • CMD : 윈도우즈 명령 프롬프트 창을 열어줌
  • COMP : 두 개 또는 여러 개의 파일을 비교
  • DATE : 날짜를 보여주거나 설정
  • DEL : 하나 이상의 파일을 지우기
  • DIR : 디렉토리에 있는 파일, 하위 디렉토리 목록을 보여줌
  • DISKPART : 디스크 파티션 속성을 표시하거나 구성
  • ECHO : 메시지를 표시하거나 ECHO를 사용 또는 사용하지 않음
  • ERASE : 하나 이상의 파일을 지움
  • EXIT : CMD.EXE프로그램을 마침
  • FIND : 파일에서 텍스트 문자열을 찾음
  • FINDSTR : 파일에서 문자열을 찾음
  • HELP : 윈도우즈 명령어에 관한 도움말 제공
  • MKDIR : 디렉토리 생성
  • MOVE : 하나 이상의 파일을 한 디렉토리에서 다른 디렉토리로 이동
  • RENAME : 파일 이름을 변경
  • REPLACE : 파일을 대체
  • RMDIR : 디렉토리를 지움

 

2. 리눅스/유닉스 계열 운영체제의 기본 명령어

[1] 쉘의 특징

명령어 해석기 : 명령어의 모양인 별칭, 쉘 함수 등을 찾아 실행

인터페이스 : 시스템과 사용자 간의 인터페이스를 담당

여러 종류 쉘 : Bourne 계열은 Bash, Korn, Bourne 쉘 등이 존재

 

 

[2] 명령어 종류

  • uname - a : 시스템의 모든 정보를 확인하는 명령어
  • unme - r : 운영체제의 배포 버전 출력하는 명렁어
  • cat : 파일의 내용을 화면에 출력하는 명령어
  • uptime : 시스템의 가동 시간과 현재 사용자 수, 평균 부하량 등을 확인하는 명령어
  • id : 사용자의 로그인명, id, 그룹 id 등을 출력하는 명령어
  • last : 시스템의 부팅부터 현재까지의 모든 사용자의 로그인과 로그아웃에 대한 정보를 표시하는 명령어
  • who : 현재 접속사 사용자 정보 표시하는 명령어
  • ls : 현재 디렉토리 내 파일 및 폴더들의 목록을 표시하는 명령어
  • pwd : print working directory, 현재 작업 중인 디렉토리의 절대 경로를 출력하는 명령어
  • rm : 파일 삭제 명령어
  • cp : 파일 복사 명령어
  • mv : 파일 이동 명령어
  • ps : 현재 실행되고 있는 프로세스 목록 출력
  • pmap : 프로세스ID를 기준으로 메모리 맵 정보를 출력하는 명령어
  • kill pid : 특정 프로세스 종료 명령어
  • fork : 새로운 프로세스를 생성하는 명령어
  • chmod : 특정 파일 또는 디렉토리의 퍼미션 수정 명령어
  • chown : 파일이나 디렉토리의 소유자, 소유 그룹 수정 명령어
  • ifconfig : 네트워크 인터페이스를 설정하거나 확인하는 명령어
  • host : 도메인, ip주소를 출력하는 명령어
  • tar : 여러 개의 파일을 하나로 묶거나 풀 때 사용하는 명령어
  • gzip : 파일을 묶거나 풀 수는 없지만 압축을 담당
  • grep : 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자 할 때 사용하는 명령어
  • find : 특정한 파일을 찾는 명령어
  • rsync : 로컬 또는 원격의 파일과 디렉토리를 복사하고 동기화하는 명령어
  • df : 시스템에 마운트된 하드디스크의 남은 용량을 확인할 때 사용하는 명령어
  • du : 파일 사이즈를 kbyte 단위로 보여주는 명령어
  • cd : 디렉토리를 이동하는 명령어

 

 

더보기

(4) 파일 디스크립터

1. 파일 디스크립터 개념

- 운영체제가 필요로 하는 파일에 대한 정보를 갖고 있는 제어 블록

 

'정처기(필기) > 프로그래밍언어활용' 카테고리의 다른 글

기본 개발환경 구축  (0) 2022.06.13
네트워크 기초 활용  (0) 2022.06.12
운영체제, 메모리 관리  (0) 2022.06.09
언어특성 활용, 라이브러리  (0) 2022.06.08
기본문법  (0) 2022.06.08