4. 프로그래밍 언어 활용 - 응용 SW 기초 기술 활용(프로세스)

155. 프로세스 (Process, Job, Task)

: 프로세서(CPU)가 처리하는 사용자 프로그램, 시스템 프로그램 등의 실행 중인 프로그램 (작업, 태스크)

 

- 프로세스의 다양한 정의

  • PCB(프로세스 제어 블록)을 가진 프로그램
  • 실 기억장치에 저장된 프로그램
  • 프로세서가 할당되는 실체이자 디스패치(dispatch)가 가능한 단위
  • 프로시저가 활동 중인 것
  • 비동기적 행위를 일으키는 주체
  • 지정된 결과를 얻기 위한 일련의 계통적 동작
  • 목적이나 결과에 따라 발생하는 사건들의 과정
  • 운영체제가 관리하는 실행 단위

프로시저

: 한 프로그램을 분할한 작은 단위의 프로그램 (부프로그램)

 

비동기적 행위

: 여러 프로세스가 서로 규칙적이거나 연속적이지 않고 독립적으로 실행되는 것

 

- 프로세스 제어 블록 (PCB; Process Control Block)

: 운영체제가 프로세스에 대한 중요한 정보를 저장해 놓은 곳 (Job Control Block, Task Control Block)

  • 각 프로세스가 생성될 때마다 고유의 PCB 역시 생성됨
  • 프로세스가 완료되면 해당 프로세스의 PCB는 제거됨
  • PCB에 포함되는 정보
    • 프로세스의 현재 상태 (제출, 접수, 준비, 실행, 대기)
    • 포인터 (부모/자식 프로세스에 대한 포인터, 프로세스의 위치를 가리키는 포인터, 할당된 자원에 대한 포인터)
    • 프로세스 고유 식별자
    • 스케줄링 정보 및 우선순위
    • CPU 레지스터 정보 (누산기, 인덱스 레지스터, 범용 레지스터, 프로그램 카운터, etc.)
    • 주 기억장치 관리 정보 (기준 레지스터, 페이지 테이블)
    • 입출력 상태 정보 (입출력 장치, 개방된 파일)
    • 계정 정보 (CPU 사용 시간, 실제 사용 시간, 한정된 남은 시간)

 

2) 프로세스 상태 전이

: 프로세스가 시스템 내에 존재하는 동안 프로세스의 상태가 변하는 것

 

- 프로세스의 상태

  • 제출 (Submit) : 작업을 처리하기 위해 사용자가 작업을 시스템에 제출한 상태
  • 접수 (Hold) : 제출된 작업이 스풀 공간이 디스크의 할당 위치에 저장된 상태
    • 스풀링 (Spooling) : 입출력할 데이터를 직접 입출력 장치에 보내지 않고 나중에 일괄적으로 처리하기 위해 디스크에 저장하는 것

          -> 입출력 장치 공유 가능, 다중 프로그래밍 성능 향상, 입출력 장치의 느린 속도 보완

  • 준비 (Ready) : 프로세스가 프로세서를 할당받기 위해 기다리고 있는 상태
    • 준비 상태 큐 (Ready Queue) : 준비 상태의 프로세스들이 실행을 기다리는 큐
    • 잡 스케줄러 (Job Scheduler) : 접수 상태의 프로세스를 준비 상태 큐에 넣어 준비 상태로 전이시킴
  • 실행 (Run) : 준비 상태의 프로세스가 프로세서를 할당받아 실행되는 상태
    • 프로세스 수행이 완료되기 전에 주어진 할당 시간이 종료되면 (Timer Run Out), 다시 준비 상태로 전이
    • 실행 중인 프로세스가 입출력 처리를 요청하면 대기 상태로 전이
    • 프로세서 스케줄러 (Processor Scheduler, CPU Scheduler) : 준비 상태 큐에서 기다리는 프로세스들 중 하나를 선택하여 프로세서를 할당하고 실행 상태로 전이시킴 (Dispatch)
  • 대기(Wait, Block, 보류) : 입출력 처리가 필요한 프로세스가 중단되어 입출력 처리 완료를 대기하는 상태
    • 깨움 (Wake Up) : 요청한 입출력 작업이 완료되어 프로세스가 대기 상태에서 준비 상태로 전이되는 과정 
  • 종료 (Terminated, Exit) : 프로세스의 실행이 끝나고 프로세스 할당이 해지된 상태

※ 교통량 제어기 (Traffic Controller) : 프로세스의 상태에 대한 조사와 통보를 담당

 

※ 문맥 교환 (Context Switching) : 실행 중인 한 프로세스에서 준비 상태의 다른 프로세스로 CPU의 할당이 이동하는 것

  • 현재 CPU가 할당된 프로세스의 상태 정보를 저장하고 새 프로세스의 상태 정보를 설정한 후 CPU 할당을 넘겨줌

 

3) 스레드

: 프로세스 내에서의 작업 단위, 시스템의 여러 자원을 할당받아 실행하는 프로그램의 단위

  • 단일 스레드 : 한 프로세스 내에 하나의 스레드가 존재하는 경우
  • 다중 스레드 : 한 프로세스 내에 여러 스레드가 존재하는 경우
  • 프로세스의 일부 특성도 가지고 있어 경량 프로세스라고도 함
  • 스레드 기반 시스템에서 독립적인 스케줄링의 단위
  • 동일 프로세스 환경에서 서로 독립적인 다중 수행이 가능
  • 한 프로세스 내의 스레드들은 스택은 각자 할당 받지만 코드, 힙, 데이터 공간은 공유함
  • 분류
    • 사용자 수준의 스레드 : 사용자가 만든 라이브러리를 사용해서 운용 -> 속도는 빠르지만 구현이 어려움
    • 커널 수준의 스레드 : 운영체제의 커널에 의해 운용 -> 속도는 느리지만 구현이 쉬움
  • 스레드 사용의 장점
    • 하나의 프로세스를 여러 스레드로 생성해 병행성 증진
    • 하드웨어, 운영체제의 성능과 응용 프로그램의 처리율 향상
    • 응용 프로그램의 응답 시간 단축
    • 실행 환경 공유 -> 기억 장소의 낭비 감소
    • 프로세스 간 통신 향상
    • 기억 장치 공유 -> 효율적인 통신 가능

156. 스케줄링

: 프로세스가 생성되어 실행될 때 필요로 하는 시스템의 여러 자원을 해당 프로세스에게 할당하는 작업

  • 프로세스의 생성부터 완료까지 프로세스는 여러 스케줄링 과정을 거침

 

- 스케줄링의 종류

  • 장기 스케줄링 (Long-term Scheduling, 작업 스케줄링, 상위 스케줄링)
    • 어떤 프로세스가 시스템 자원을 차지할 것인가를 결정하여 준비 상태 큐로 보내는 작업
    • 작업 스케줄러(Job Scheduler)가 수행
  • 중기 스케줄링 (Medium-term Scheduling)
    • 어떤 프로세스들이 CPU를 할당받을 것인지를 결정하는 작업
    • CPU를 할당받고자 하는 프로세스가 많을 경우 프로세스를 일시적으로 보류시킨 뒤 활성화하여 부하를 조절
    • 메모리에 적재되는 프로세스의 수를 동적으로 조절
  • 단기 스케줄링 (Short-term Scheduling, 프로세서 스케줄링, 하위 스케줄링)
    • 프로세스가 CPU를 할당받는 시기를 결정하고 할당받을 프로세스를 지정하는 작업
    • 프로세서 스케줄러(Processor Scheduler)가 수행

 

- 스케줄링의 목적

  • 공정성 : 모든 프로세스에게 CPU를 공정하게 할당
  • 처리율(량) 증가 : 단위 시간 당 처리하는 프로세스의 양을 증가
  • CPU 이용률 증가 : CPU 낭비 시간 감소, CPU가 순수하게 프로세스 실행에 사용되는 시간 증가
  • 우선 순위 제도 : 우선 순위가 높은 프로세스를 먼저 실행
  • 오버헤드 최소화
  • 응답 시간(반응 시간) 최소화
  • 반환 시간 최소화
  • 대기 시간 최소화 : 프로세스가 준비 상태로 대기하는 시간을 최소화
  • 균형 있는 자원 사용
  • 무한 연기 회피 : 프로세스가 자원을 기다리며 무한정 연기되는 상태를 피함

 

1) 프로세스 스케줄링 기법

1. 비선점 스케줄링 (Non-Preemptive Scheduling)

: 이미 할당된 CPU는 다른 프로세스가 강제로 빼앗아 사용(선점)할 수 없도록 하는 스케줄링 기법

  • 프로세스가 일단 CPU를 할당받으면 해당 프로세스가 완료될 때까지 CPU를 사용
  • 모든 프로세스에 대한 요구를 공정하게 처리
  • 프로세스 응답 시간의 예측이 용이
  • 일괄 처리 방식에 적합
  • 짧은/중요한 작업이 긴/중요하지 않은 작업을 기다리는 경우 발생
  • ex) FCFS, SJF, 우선 순위, HRN, 시한부 알고리즘, etc.

 

2. 선점 스케줄링 (Preemptive Scheduling)

: 한 프로세스가 CPU를 할당받아 실행되는 중일 때 우선 순위가 더 높은 다른 프로세스가 CPU를 빼앗아 사용(선점)할 수 있는 스케줄링 기법

  • 우선 순위가 높은 프로세스를 빠르게 처리할 수 있음
  • 빠른 응답 시간을 요구하는 대화식 시분할 시스템에 적합
  • 많은 오버헤드 발생
  • 인터럽트용 타이머 클록 : 선점이 가능하고 프로세스가 자원을 독점하지 못하도록 하는 할당된 시간에 대한 타이머
  • ex) RR(Round Robin), SRT, 선점 우선 순위, 다단계 큐, 다단계 피드백 큐, etc.

157. 주요 스케줄링 알고리즘

1) 선입선출 알고리즘 (FCFS; First Come First Served, FIFO)

: 프로세스가 준비 상태 큐에 도착한 순서에 따라 차례로 CPU를 할당하는 기법

  • 가장 간단한 알고리즘
  • 공평성은 유지되지만 짧은/중요한 작업이 긴/중요하지 않은 작업을 기다리는 경우 발생

 

2) 단기 작업 우선 알고리즘 (SJF, Shortest Job First)

: 준비 상태 큐의 프로세스들 중에서 실행 시간이 가장 짧은 프로세스에게 먼저 CPU를 할당하는 기법

  • 가장 적은 평균 대기시간을 제공하는 최적 알고리즘
  • 실행 시간이 긴 프로세스가 무한정으로 대기하는 경우 발생

 

3) HRN (Highest Response-Ratio Next)

: 프로세스의 대기 시간과 실행 시간을 이용하여 우선 순위를 부여하는 알고리즘

  • 실행 시간이 긴 프로세스에게 불리한 SJF 기법을 보완하기 위해 제시
  • 우선 순위 계산 방법

  • 우선 순위 계산 결과 수치가 가장 큰 프로세스부터 낮은 프로세스 순으로 순위 부여
  • 실행 시간이 짧거나 대기 시간이 긴 프로세스일수록 우선 순위가 높아짐

158. 환경 변수

: 시스템 소프트웨어의 동작에 영향을 미치는 동적인 값들의 모임

  • 변수명과 값으로 구성
  • 시스템의 기본 정보를 저장
  • 부모 프로세스에서 자식 프로세스로 상속됨
  • 분류
    • 시스템 환경 변수 : 시스템 전반에 걸쳐 적용되는 환경 변수
    • 사용자 환경 변수 : 사용자 계정 내에서만 적용되는 환경 변수

 

1) Windows의 주요 환경 변수

: 변수명 앞과 뒤에 %를 붙여서 명령어나 스크립트에서 사용, set 명령어를 통해 모든 환경 변수와 그 값을 출력

윈도우 내의 환경 변수 설정 창

  • %ALLUSERPROFILE% : 모든 사용자의 프로필이 저장된 폴더
  • %APPDATA% : 설치된 프로그램의 필요 데이터가 저장된 폴더
  • %ComSpec% : 기본 명령 프롬프르토 사용할 프로그램 이름
  • %HOMEDRIVE% : 로그인한 계정의 정보가 저장된 드라이브
  • %HOMEPATH% : 로그인한 계정의 기본 폴더
  • %LOGONSERVER% : 로그인한 계정이 접속한 서버명
  • %PATH% : 실행 파일을 찾는 경로
  • %PATHEXT% : cmd에서 실행 가능한 파일의 확장자 목록
  • %PROGRAMFILES% : 기본 프로그램의 설치 폴더
  • %SYSTEMDRIVE% : Windows가 부팅된 드라이브
  • %SYSTEMROOT% : 부팅된 OS가 있는 폴더
  • %TEMP% / %TMP% : 임시 파일이 저장되는 폴더
  • %USERDOMAIN% : 로그인한 시스템의 도메인명
  • %USERNAME% : 로그인한 계정의 이름
  • %USERPROFILE% : 로그인한 유저의 프로필이 저장된 폴더명

 

3) UNIX/LINUX의 주요 환경 변수

: 변수명 앞에 $를 붙여 명령어나 스크립트에 사용, set, env, printenv, setenv를 입력하여 모든 환경 변수와 그 값을 출력

  • $DISPLAY : 현재 X Window 디스플레이 위치
  • $HOME : 사용자의 홈 디렉토리
  • $LANG : 프로그램 사용 시 기본 지원하는 언어
  • $MAIL : 메일 보관 경로
  • $PATH : 실행 파일을 찾는 경로
  • $PS1 : 쉘 프롬프트 정보
  • $PWD : 현재 작업하는 디렉토리
  • $TERM : 로그인 터미널 타입
  • $USER : 사용자의 이름

X Window

: CLI 방식인 UNIX 계열의 운영체제에서 사용되는 GUI 기반의 시스템 소프트웨어


159. 운영체제 기본 명령어

1) Windows 기본 명령어

: 명령 프롬프트(cmd) 창에 명령어를 직접 입력하여 작업을 수행하는 CLI 방식이 가능함

  • DIR : 현재 디렉토리 내 파일의 목록 표시
  • COPY : 파일 복사
  • TYPE : 파일의 내용 표시
  • REN : 파일 이름 변경
  • DEL : 파일 삭제
  • MD : 디렉토리 생성
  • CD : 디렉토리의 위치 변경
  • CLS : 현재 화면의 내용을 지움
  • ATTRIB : 파일의 속성 변경
  • FIND : 파일 검색
  • CHKDSK : 디스크 상태 점검
  • FORMAT : 디스크 표면을 트랙과 섹터로 나누어 초기화
  • MOVE : 파일 이동

 

2) UNIX/LINUX 기본 명령어

: 쉘(shell)에 명령어를 입력하여 작업을 수행하는 CLI 방식, X Window라는 별도의 프로그램을 설치하여 GUI 방식으로 사용하는 것이 가능

  • cat : 파일의 내용 표시
  • chdir : 디렉토리의 위치 변경
  • chmod : 파일의 보호 모드를 설정해 파일의 사용 허가를 지정
  • chown : 소유자 변경
  • cp : 파일 복사
  • exec : 새로운 프로세스 수행
  • find : 파일 검색
  • fork : 현재 프로세스를 복제한 자식 프로세스 생성
  • fsck : 파일 시스템 검사 및 보수
  • getpid : 현재 프로세스의 프로세스 아이디를 얻음
  • getppid : 현재 프로세스의 부모 프로세스 아이디를 얻음
  • ls : 현재 디렉토리 내 파일 목록 표시
  • mount/unmount : 파일 시스템 마운팅/마운팅 해제
  • rm : 파일 삭제
  • uname : 시스템 정보 표시
  • wait : fork 후 exec으로 실행되는 프로세스의 상위 프로세스가 event를 기다림

 

마운팅

: 새로운 파일 시스템을 기존 파일 시스템의 서브 디렉토리에 연결하는 것