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 |