정보보안기사/2024 최적합 정보보호론

PART6. 시스템 보안 - SECTION 2. 운영체제 주요 구성 기술

코드라니(CODERANY) 2026. 2. 26. 06:58

1. 프로세스 관리

가. 프로세스(Process)

가) 프로세스 개념

떠있는 프로그램, 현재 실행중인 프로그램. 여러개의 프로그램이 떠있는걸 볼 수 있음

컴퓨터 내에서 CPU에 의해 실행중인 프로그램.

자식 프로세스는 부모프로세스 ->코크?라는 명령어에 의해 만들어짐.

여러개의 자식프로세스가 하나의 CPU에서 동시에 처리되는 것처럼 보이는 것을 멀티태스킹(Multitasking)이라고 한다.

 

- 떠있는 프로그램. 실행중인 프로그램.

- 프로시저가 활동중인것

메모리에 프로세스가 떠있고 프로세스는 프로시저로 구성됨
프로시저: 함수, 서브네팅 등
하나의 프로시저는 여러개의 스레드들이 모였음.

비동기적임(언제 일어날지 모름)

프로세스 컨트롤 블록의 존재로서 명시되는 것 -> 사람으로 치면 명찰을 가지고 있는 것

 

한글이라는 프로그램이 주기억장치에 로깅하고 캐시 메모리에 특히 자주 사용하는 것을 미리 갖다놓음 시피유가 특정명령을 실행하기 위한 명령어를 캐시에서 찾아서 있으면 갖다 쓰는거고 없으면은 주기억장치에서 명령어를 찾아오고 없으면 보조기억장치로 감.

프로그램을 깔면 보조기억장치에 깔림. 

예를들어 한글이란 프로그램이 있고, 이게 무겁기 때문에 여러개의 프로세스들이 뜸. 얘네가 하나의 프로그램을 돌리는 거임. 멀티프로그래밍임.

멀티프로그래밍은 하나의 프로세서(CPU)가 여러 개의 프로그램을 번갈아 가며 메모리에 적재해 두는 방식
을 말합니다.

하나의 프로세스는 여러개의 프로시저들이 모여서 하나의 프로세스를 구성함. 각각의 프로시저는 경량 스레드가 모인거임. 프로세스의 개수보다 쓰레드의 개수가 많음.

쓰레드도 여러개의 핸들이 모여서 만들어진거긴 함.

 

■ 프로세스 메모리의 구조

한글이라는 프로그램이 내 컴퓨터에 깔려있음. 보조기억장치에 깔려있고, 프로그램이 로딩되어 실행이 되면 주기억장치에 여러개의 프로세스들이 떠있음. 하나의 프로세스를 확대하면 각각의 프로세스는 자기만의 명찰을 가지고 있음. 그게 pcb이고, 프로세스의 이름, 목적, 시간 등의 정보가 들어있음.

각각의 프로세스에는 스택,힛, 데이터, 코드 구분이 있는데, 

먼저 프로그램에서 사용되는 지역변수들은 스택에 만들어짐. 스택이 lifo구조임. 스택은 공간이 커지니까, 데이터가 증가함.

프로세스의 맨 바닥에는 코드가 있음. 프로그램 코드가 저장되는 영역이 있고, 

데이터라고 하는 영역에는 전역변수-변수중엔 지역변수, 전역변수가 있는데, 전역변수는 프로그램 전체에서 사용하는 변수임.- 그 위에 heap이라는 영역이 있음. 개발자가 그때그때 가변적으로 사용할 수 있는 구간임. 힙은 공간을 위로 침법하고 스택은 아래로 침범함. -> 다른영역을 침법하는걸 오버플로우라고 함

나) 프로세스 특징

다)  프로세스 상태

실행할 때 유저모드와 커널모드가 왔다갔다하면서 실행함. 

처음에 제시->보류-> 준비 -> 실행(유저-커널을 오감, 근데 안끝나면 실행상태로 내려옴) -> 하다가  블록킹 걸리면 웨이트함. 입력대기, 사용자가 키보드로 입력하는걸 기다린다든지 등(EX: 사용자가 이자율을 적으시오 등)  -> 사용자가 4를 땅치면 대기상태서 실행상태로 안가고 준비상태로 감. 그래서 깨어나면 다시 할당되어 실행됨. 

(1) Runnung State(실행상태) 

말 그대로 실행상태(뛰는 중)

(2) Ready State(준비상태)

준비 땅~하는 레디

(3) Block State(대기상태)

뛰다가 모종의 이유로 블록킹이 걸림. 이벤트를 기다리고 있는 상태(scanf) 

-> 사용자가 뭔가를 입력해야함. 

scan은 사용자가 키보드로 입력하고 엔터 누르길 기다림. 

(4) Pending State(보류상태)

(5) Terminated State(완료상태)

라) 프로세스 상태 전이

(1) 디스패치(Dispatch)

준비상태에서 할당되어서 실행상태가 된거

(2) 할당시간 초과(Timer Run Out)

뛰다가 안끝나네.. 할당시간을 모두 사용하면 다른 프로세스를 위해 다시 준비상태가 되는 것

(3) 대기(Block)

실행 상태에서 블록킹 상태 -> 입력 대기

(4) 깨움(Wake up)

내가 뭔가 값을 넣고 엔터를 침, 대기 상태에서 준비상태로 감

 

나. 프로세스 제어 블록(PCB: Process Control Block)

가) 개념

자기 명찰이라고 보면 됨, 모든 프로세스는 자기만의 PCB를 가지고 있음.

하나의 프로세스는 확대하면 각각의 프로세스는 자기만의 프로세스 컨트롤 블록을 가지고 있음.  

스택, 힙, 데이터, 코드를 가짐 

이게 서로 영역을 침범하면 버퍼오버플로우가 됨.

 

커널의 자료구조임

커널: 운영체제를 대신해서 하드웨어를 관리함.

프로세스를 관리하는데 필요한 모든 정보를 가지고 있음.

나) PCB 포함 정보

- 프로세스 ID(식별자): 각각의 프로세스 번호

- 프로세스 상태: 작업 관리자에 상태 나옴 보통 실행 중 

- 프로그램 카운터 = 레지스터

클록이 한 번 튀면 하나의 워드가 8비트 짜리가있고 16비트 짜리가 있고(이건 하나의 워드가 16비트임) 클록이 한 번 튈 때마다 컴퓨터는 16비트씩 처리함, 그리고 32-> 64비트 까지와서 현재임.

당연히 64가 옛날 8비트보다 빠르겠지. 이렇게 프로그램은 순차처리가 기본이고 어떠한 특정한 함수를 만나서 처리함. 

CPU의 명령어 처리 사이클

모든 프로그램의 시작, 클록이 한 번 탕 튀면 얘가 프로그램 카운터가 레지스터에서 100번지를 만들면 그 100번지가 메모리 어드레스레지스터로 감. 그래서 프로그램카운터 레지스터 크기와 메모리 어드레스 레지스터 크기는 같음 프로그램 카운터 레지스터는 자동으로 1 증가함. 그 다음에 메모리 어드레스 레지스터에 있던 100번지는 주소 버스를 통해 주기억 장치의 주소 처리기가 100번지를 찾아가서 100번지에 있는 명령이나 데이터를 데이터 버스를 통해서 메모리 버퍼 레지스터에 갖다 놓음. 그렇게 메모리 버퍼 레지스터에 갖고 온게 명령인지 데이터인지 확인해서 명령이면 인스트럭션 레지스터(명령레지스터)로, 데이터면 어큘러레이터(누산기 레지스터)로 보냄. 그걸 동작하게 하는게 제어장치가 하는 일
명령이면 명령어 레지스터에서 명령을 해독함 110번지 가져와라 하면 주소처리기에서 메모리 어드레스 레지스터로 간 다음에 주소 버스를 통해 110번지에 있는 명령이나 데이터를 가져오고 그 다음에 메모리버퍼 레지스터에서 데이터니까 어큐물레이터(누산기)로 보냄
그 다음에 101번지에 있는걸 봐야함. 메모리 어드레스 레지스터로 간 다음에 주기억장치의 101번지를 찾아감. 찾아갔더니 101번지에는 112를 더하라는 내용이 있음.  이 명령어를 메모리버퍼에 갖다놓고 명령어 레지스터에 갖다놓고 112번지를 찾아가니 30이라는 데이터가 있다. 30은 데이터 이기 때문에 누산기 레지스터에 보냄. 
그럼 누산기에는 30과 80이라는 값이있고, 해독기에서 더하라고 하면 하면 연산장치로 가서 30과 80을 더해서 110이라는 결과값을 가져옴.

뭔가 박자에 맞춰 동작하는게 클록이고, 수정발진기가 클록을 만들어 냄.
가정제품 수명이 10년인 이유가 이 클록의 수명이 10년임.
이 과정을 빠르게 반복하며 CPU가 주기억장치에서 명령이나 데이터를 가져와서 처리해서 연산함.

-일반 레지스터

레지스터 set

이게 사람이 두뇌면 사람이 계산할 때 앞의 결과를 잠깐 외우고 있어야함. 그 결과를 잠깐 외우고 있는게 레지스터임. 제어장치는 컨트롤 유닛, 연산하는 것임.

 

다) PCB 위치

보호된 메모리 영역(커널)에 위치함. 

자기 명찰임.

 

다. 스케줄링(CPU Scheduling)

1) 개념 

작업순서를 구하는 것.

가수가 지방순회공연을 하려는데 능력있는 매니저는 서울-대전-광주-부산.. 이런식으로 스케쥴을 짜겠지만, 초짜는 서울-부산-대전-광주 이런식으로 짜겠지. 이렇게 스케쥴 짜면 도로에서 시간 낭비하겠지

스케쥴이란 효율적으로 작업을 하기위해 작업순서를 작성하는 것.

2) 스케줄링 평가 기준

CPU 사용률은 높은게 좋지

처리능력은 최대인게 좋고

응답시간은 빠른게 좋고

대기시간과 반환시간은 최소가 좋지

3) Scheduler의 종류 및 역할

4) 프로세스 우선순위와 스케줄링

우선순위 값이 크면 우선순위가 높음. (1<2<3<4)

우리랑 다른게 우리는 1등급이 가장 높은건데, 서양에서는 1등급이 가장 낮은거임. 

그리고 이거 서양에서 만듦~

5) 프로세스 스케줄링 분류

가) 선점 스케줄링: 운영체계에 강력한 제어권을 가짐. 

내가 지금 CPU인데 급한일을 처리하는 프로세스임. 예: 화장실에 줄 서 있음.

근데 우리가 쓰는 선점형 스케쥴은 관리자(OS)한테 화장실 열쇠랑 제어권이 있음. 그래서 프로세스가 들어오는 순서대로, 원래  1이 들어가면 2가 들어가고... 이러는데, 유감스럽게도 마지막 줄에 있는 사람이 똥싸기 직전임. 이때 또 하필이면 화장실의 어떤 프로세스는 나올 생각을 안하네...?...  맨 뒷줄에 있는 사람을 앞으로 데리고 옴 그리고 화장실 안에있는 프로세스를 강제로 끄집어 냄. -> 이게 더 처리속도가 빠름. 강제로 끄집어 내니까, 공정하진 않음 ㅎㅎ; 줄 선 순서대로 처리하는게 공정하지. 근데 선점형은 더 급한 사람을 그냥 갖다 쓰는거지. 우리가 현재 쓰는 방식이 이럼. -> 컨트롤+알트+딜리트 -> 작업 강제 종료가 이거

선점이라는건 운영체계한테 강력한 제어권이 있음. 그래서 화장실에 앉아있는 프로세스가 안나온다? 그럼 운영체계가 강제로 끄집어 냄. 선점은 프로세스가 CPU를 선점하는게 아니라, 운영체계가 프로세스를 자원을 선점하고 있다는 의미임.

나) 비선점 스케줄링: 운영체계에 제어권이 없었음. 관리자에게 화장실 열쇠가 없음. 예전엔 이 방식이어서 화장실 들어간 프로그램이 뻗으면 방법이 없음. 컴퓨터 꺼야함. 파워 내려야함.ㅠ 근데 지금꺼(선점형 스케쥴링)은 강제로 프로세스를 죽일 수 있음. 

운영체계한테 열쇠가 없어서 기다리다 죽어 ㅠ 비선점은 일하는 걸 끄집어낼 수 없음.

다) 비교

구분 선점 스케줄링 비선점스케줄링
개념 프로세스를 중지시키고 자신이 CPU점유 가능
높은 우선순위를 가진 프로세스들이 빠른 처리를 요구하는 시스템에서 유용
한 프로세스가 CPU를 할당 받으면 작업 종료 후 CPU 반환 시까지 다른 프로세스는 CPU 점유 불가
장점 빠름
대화식 시분할(정해진 시간 되면 끄집어 냄)
응답시간 예상 용이

단점 높은 우선순위 프로세스들이 들어오는 경우 오버헤드를 초래함 짧은 작업을 수행하는 프로세스도 ㅅ긴 시간 대기

6) 프로세스 스케줄링 알고리즘

■ 선점형 스케줄링

가) SRT(Short Remaining Time) 스케줄링

: 남은 시간이 짧은 프로세스를 먼저 양보 -> 기아현상 발생가능

가장 짧은 시간이 소요된다고 판단되는 프로세스를 먼저 실행함.

마트에 보면 계산대가 큐임. 들어온 순서대로 계산을 함. 선입선출이 큐임.

근데, p1이 먼저 도착(처리시간 20초), p2이 두번째로 도착(처리시간 3초) -> 그럼 p2가 P1앞으로 감.

기아현상 발생가능함. 20초가 아니라 2000초 짜리면, 무한의 새치기를 당하다 폐사함..

나) RR(Round Robin, 순환 할당) 스케줄링

우리가 쓰는 방식이 이거임. 일정한 시간 할당량만큼 CPU를 점유하고 할당량을 초과하면 준비큐로 돌아옴.

시분할 시스템을 위해 고안 되었음. 

시분할 시스템: https://coderany.tistory.com/154

프로세스 도착 p1(5초), p2(2초), p3(5초) CPU의 할당 1초 = 각 프로세스가 1초씩 선점함. 

CPU의 시간 할당량이 극단적으로 크면 FCFS와 다를바 없음; 

다) MLQ(Multi-level Queue, 다단계 큐) 스케줄링

: 남은 시간이 짧은 프로세스를 먼저 양보 -> 기아현상 발생가능

독자적인 스케줄링을 가짐. 마트에도 소량 셀프 계산대가 있음.

급한 줄: 시스템 프로세스

들 급한 줄: 대화형 프로세스

안 급한 줄: 일괄처리 프로세스

자기가 급한지 안 급한지에 따라 프로세스를 본인이 선택함.

A큐에 섰다가 다른 줄로 줄 변경 안됨.

급한줄 먼저 처리하기 때문에 기아현상이 발생함. 급한줄에서도 더 급한애가 있으면 새치기함 ㅠ

라) MFQ(Multi-level Feedback Queue) 스케줄링: 다단계 피드백 큐

프로세스가 큐 사이를 이동함 

단계 1

단계 2

단계 3

단계 4

단계들이 있는데, 각 단계별로 큐가 있고, 1단계에서는 4초간 CPU할당 끝나면 끝 아니면 2단계로 감(할당 8초) 끝나면 끝 아니면 3단계로 감, 4단계에서는 끝날 때 까지 라운드 로빈 방식으로 계속 돌림. 그렇다고 cpu점유시간을 고정시킴(계속 증가 시킬 수 없음) -> 유닉스에서 사용함

 

■ 비선점형 스케줄링

마) FCFS(First Come First Service) 스케줄링 = FIFO(First Input First Out)

줄 서 순서대로 처리~ 선입선출~

바) SJF(Shortest Job First, 최소작업우선) 스케줄링

: 빨리 끝나는 애 양보하다 뒤짐 -> 기아현상 발생가능

짧은 일부터 먼저함. 운영체제가 관리할게 없고 손님들이 알아서 함. 

사) HRN(Highest Respone ratio Next) 스케줄링

SJF에서 기아현상을 줄였음. 우선순위가 높은걸 먼저 처리함. 공식

(대기시간+서비스 시간)/서비스 시간

우선순위가 큰 놈부터 처리함. -> 오래 기다릴수록 대기시간이 커지기 때문에 우선순위가 커짐.

아) 각 스케줄링 방식 비교

종류 방법 특징 비교
SRT      
RR      
MLQ      
MFQ      
FCFS      
SJF      
HRN      

 

라. 프로세스 동기화

■ 용어정리
교착상태(데드락): 하나의 CPU를 여러개의 프로세스가 쓰려고 함 그때 동기화는 뭐냐면 이 자원을 순서대로 사용하게 하는 것 1,2,3,4 근데 동기화에 실패하면 교착상태(데드락)가 됨.  -> 사거리에서 길 막히는게 데드락임.
임계영역: 기다려서 화장실에 들어갔어 그럼 임계영역 안에서는 안심하고 일을 볼 수 있게 하는 것, 바깥에서 물뿌리고 그럼 안됨.
상호배제: 아무리 급해도 화장실은 혼자만 일을 봐야 함. 상호베타적, 하나의 프로세스가 화장실에서 일을 보고 있으면 다른 프로세스는 못들어오게 하는 것임
교착상태: 여러 프로세스가 자원을 가지려고 사운다. 자원이 있어야 프로세스가 일을 처리하는데 자원을 차지하지 못해 시스템이 다운된다.
진행조건: 지금 내가 화장실에 안들어가도 되는데, 다른 프로세스가 화장실에 들어가려는 것을 막으면 안됨.
제한대기: 프로세스의 임계지역 진입은 유한 시간 내에 이루어져야 한다.

 

1) 프로세스 간 동기화 및 통신

가) 기본개념

임계영역: 화장실 안, 다른 프로세스는 기다려

상호배제: 하나의 프로세스만 들어가

경쟁조건: 서로 경쟁하지 말아요 우리

나) 동기화(상호배제) 기법

(1) 세마포어: 철도에 있는 까치발 신호기

한 프로세서가 사용하고 있는 동안 세마포어를 세워서 다른 프로세서를 대기시키고 사용이 끝나면 해제시키는 방법

내가 화장실에 들어가면 세마포어가 닫히고, 내가 나오면 세마포어가 열림.

프로세스A가 임계구역(화장실)에 들어가 문을 잠그면 사용중 -> 다른 프로젝트는 대기 

(2) 모니터

세마포어의 발전, 고속도로 화장실같은데는 화장실이 비었는지 아닌지 바깥에서 보임. 

 

마. 교착상태(Deadlock)

1) 개념

누군가가 양보를 해야하는데 양보를 안하면 그 누구도 쉴 수 없음.

컴퓨터가 딱 서있는것 처럼 보임.

프로세스 A가 떠있고, 프로세스 B가 떠있음. 마침 프로세스 A가 프린터 중, B는 디스크 자원 점유.

근데 A가 프린트 하다가 다량의 프린터를 하려고 하니 디스크가 필요해서 디스크 자원을 요구함.

근데 마침 프로세스 B도 모종의 이유로 프린터를 필요로 함. 그럼 데드락임.

누군가 양보해야하는데 서로 물려 있어서 서있는 것 처럼 보임.

2) 교착상태의 4가지 필요조건

(1) 상호배제: 화장실이 급하다고 둘이 들어가는 상황은 안됨. 화장실은 혼자 써야함,

(2) 점유와 대기: 화장실에 휴지가 없어서 다른 사람이 휴지를 갖다 줄 때 까지 기다리거나 마를 때 까지 기다림 ㅎ

(3) 비선점: 운영체제한테 제어권이 없어서 본인 스스로 나갈 때 까지 기다림.

(4) 환영대기: 서로 박치기 중임. 방향성을 제시

3) 교착상태의 해결 방안

위 4가지 중 하나를 피하면 교착상태를 회피할 수 있음. 

 

2. 메모리(기억장치) 관리

가. 메모리(기억장치) 관리 전략

1) 개요

2) 메모리(기억장치) 관리

가) 단일 연속 주기억장치 관리

나) 분할 주기억장치 관리

3) 스와핑

4) Swap Space = Swap File

가) 개념

나) 장점

다) Swap 관련 명령어

5) 메모리 할당

가) 정적 메모리 할당

페이지를 고정된 크기로 자름

나) 동적 메모리 할당

세그먼트, 프로그램의 단위 크기 만큼 자름

6) 메모리 관리 정책

메모리 = 주기억장치

가) 메모리 관리 기법의 개념

나) 메모리 관리 기법의 종류

- 반입(Fetch) 정책: 언제 갖고 올 것이냐, 언제 주기억장치로 가져올 것이냐.

- 배치(Placement) 정책 : 어디에다 둘 것이냐.

 주기억장치 램이 있다고 가정하고 주기억장치의 일정 구역은 운영체제가 점유해서 쓰고 있고, 메신저, 다른 프로그램등이 이미 주기억 장치의 일부분을 점유해서 쓰고 있음. 그리고 공백이 있음. 

운영체제 공백(10k) 메신저 공백(30k) 사용영역 공백(25k) 사용영역 공백(40k) 공백(10k)

배치는 하나의 프로그램의 크기가 20k면 공간을 할당해야함

  - 최초적합(first fit): 일단 맞으면 들어감. 2번째 공백이겠네

  - 최적적합(best fit): 짜투리 공간이 가장 작은 곳(내부 단편화), 3번째 공백

  - 최악적합(worst fit): 몰라 큰거 조~ 4번째 공백 

- 교체(Replacement) 정책: 무엇을 교체할 것이냐.

교체는 기본적으로 가상메모리를 쓰고 있음.

(1) 요구 반입 정책(Demand Fetch Strategic): 주기억장치가 요구하면 들어감

(2) 예상 반입 정책(Anticipatory Fetch Strategic): 알잘딱깔센

7) 페이지 교체 기법

(1) 페이지 개념

(2) 선입선출(FIFO)

램이 있고 CPU가 2번 페이지를 요구함.

근데 램에 2번페이지가 없으면 부재가 발생함. 그럼 이제 2번페이지 가지러 보조기억장치에 갔다 오겠지.

그리고 시피유가 3번페이지를 요구함. 근데 페이지 프레임에 없음(부재발생). 그래서 보조기억장치에 갔다 오겠지.

그리고 2번페이지 요구 -> 그냥 갖다 쓰면 됨, 부재 발생 없음.

그리고 1번 페이지 요구 -> 부재 발생

그리고 5번 페이지 요구 -> 빈 공간이 없넹... 페이지 프레임 중 하나를 가상기억장치로 보내 빈 공간을 만들어야함 = 교체기법(FIFO, LFU.. 등등)  -> FIFO는 가장 오래있었던 페이지를 기억장치로 보내고 그 자리에 5페이지를 넣음 

그리고 0번 페이지 요구 -> 3페이지를 날리고 0페이지를 넣음 

참조페이지 2 3 2 1 5 0
페이지프레임 2 2 2 2 5 5
  3 3 3 3 0
      1 1 1
부재발생  


(3) 최소 사용 빈도(LFU, Least Frequently Used) 기법

-> 참조 횟수가 같으면 아무거나 떨굼 ㅎ;;

5번페이지 요구 -> 2페이지 2회, 3페이지 1회, 1페이지 1회 -> 랜덤 페이지 떨굼

0번페이지 요구 ->  2페이지 2회, 5페이지 1회, 1페이지 1회 -> 랜덤 페이지 떨굼

참조페이지 2 3 2 1 5 0
페이지프레임 2 2 2 2 2 2
  3 3 3 5 0
      1 1 1
부재발생  

(4) OPT(Optimal) 기법(=Belady의 MIN기법)

(5) 최저 사용 빈도(LRU, Least Recently Used)기법

가장 오랫동안 사용하지 않았던 페이지는 앞으로도 쓸 가능성이 낮더라!

5번페이지 요구 -> 가장 사용한지 오래된 3페이지를 내림

0번페이지 요구 -> 가장 사용한지 오래된 2페이지를 내림

참조페이지 2 3 2 1 5 0
페이지프레임 2 2 2 2 2 0
  3 3 3 5 5
      1 1 1
부재발생  

(6) 최근 미사용 페이지 교체(NUR: Not Used Recently) 기법(= Page Classes)

■ 자료구조
1. SSTF 알고리즘
2. SCAN 알고리즘
3. C-SCAN(Circuler-SCAN)

8) 스래싱

가) 스래싱(Thrashing)

페이지 교체가 너무 자주 일어나서 프로세스의 처리시간보다 페이지 교체시간이 더 많이 발생하는 현상 

프로세스(떠있는 프로그램)가 일해야하는데 자신의 일보다 페이지 교체에 더 많은 시간을 쓰더라.

<스레싱 문제로 인한 멀티프로그래밍 효율 저하 현상> https://velog.io/@jjuny7712/%EC%9A%B4%EC%98%81%EC%B2%B4%EC%A0%9C-Thrashing%EC%8A%A4%EB%A0%88%EC%8B%B1%EC%9D%B4-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C

cpu효율은 프로그램이 하나 떠 있는거보다 두개 떠 있는게 더 효율이 높겠지. 또 두개보단 4개, 4개보다는 8개가 시피유효율이 더 커질거임.

근데 프로그램 10개, 20개를 띄우다보면 어느순간에 스레싱 문제로 CPU효율이 뚝 떨어짐.

우리도 컴퓨터가 뻗음 -> 스레싱

 

프로세스가 너무 많이 떠있으면 프로세스의 처리 시간보다 각각의 페이지를 교체하는데 더 많은 시간을 쓰더라.

프로그램이 너무 많이 떠있으면 몇개 죽여서 효율을 높여야한다.

나) 페이지 부재 빈도(PFF: Page-Fault Frequency)

프레임이 페이지가 작은거고, 프레임이 적어서 각각의 페이지가 작은거고, 이건 프레임이 많아서 페이지가 많이 있는거. 많은게 페이지의 부재가 적겠지. 시피유가 특정 페이지 예를들어 4번 페이지다, 작으면 페이지 hit율이 떨어지겠지. 근데 많으면 페이지 적중률이 커짐. 

-> 페이지 부재율이 높으면 프로세스가 더 많은 프레임을 필요로 한다는 의미고, 페이지 부재율이 너무 낮으면 프로세스가 너무 많은 프레임을 갖고 있다는 의미

https://zangzangs.tistory.com/144

왼쪽은 프레임이 작은거고, 오른쪽은 프레임이 많은 것임. 

그러면 왼쪽이 프레임 부재율이 높겠지. 페이지의 수를 많이 하면 부재율이 떨어지겠지. 근데 너무 많이 늘릴 수는 없어서 상한선-하한선 사이에서 프레임의 수를 적절하게 관리해야함

다) working Set(작업 집합)

프로세서가 자주 참조하는 페이지들의 집함

1,2,3페이지를 자주 참조하더라 그럼 이걸 하나의 워킹셋으로 볼 수 있음. 워킹셋의 크기가 클수록 페이지 부재율은 작아지겠지. 워킹셋의 크기가 작으면 작을수록 페이지 부재율은 커지겠지.

9) 기억장치 관리 기법의 문제점과 해결방법

가) 단편화

기억장치 단편화 사용되지 않고 남는 기억장치의 빈 공간

사용되지 않고 남은 빈 공간 -> 내부 단편화: 10자리 예약했는데 사람 8명 들어가면 2명분에 대한 내부 단편화가 발생함. 

나) 내부 단편화(Internal Fragmentation)

분할 된 영역에 프로그램을 사용하고 남은 빈 공간(짜투리 공간)

하드 디스크 드라이브가 있다고 가정하고, 여기에 프로그램을 설치하면 기본적으로 연속되는게 아니고 단위가 있음. 고정분할이 있고, 가변분할이 있는데, 고정분할은 페이징임. 얘를 고정적인 크기로 자른 후 로딩할 때 이 페이지를 주기억 장치에 로딩함. 근데 로딩하다보면 어느 순간 남는 데이터가 생김. -> 내부 단편화 발생

분할된 영역의 프로그램을 사용하고 남은 빈 공간

프로그램의 크기 30mb -> 프로그램이 로딩한다는 말은 주기억장치에 들어간다는 말임 -> 프로그램이 실행되면 내부에 20mb가 남음 이게 내부 단편화임. 적재되고 빈 공간 -> 내부 단편화

운영체제가 메모리를 50MB 단위로 쪼개서 관리한다고 가정해 봅시다.
사용자가 30MB짜리 프로그램을 실행하려고 합니다.운영체제는 이 프로그램에게 50MB짜리 박스 하나를 통째로 줍니다. (더 작은 단위가 없으니까요.)프로그램은 30MB를 차지하고, 해당 박스 안에는 20MB의 빈 공간이 남게 됩니다.이 남은 20MB는 이 프로그램에게 할당된 박스 안에 있기 때문에 다른 프로그램이 들어올 수 없습니다.
즉, "할당된 공간 > 실제 필요한 공간"이라서 생기는 낭비가 바로 내부 단편화입니다.

https://m.blog.naver.com/hellomanggo_/220623825770

다) 외부 단편화(External Fragmentation)

아예 그냥 적재되지 못하고 빈 공간, 프로그램의 크기가 70mb인데,  운영체제가 메모리를 50mb로 쪼개놓고 관리해서 아예 적재가 안됨. 외부 단편화는 할당되지 못하고 남게 되는 20mb가 외부 단편화가 됨. 

분할된 영역이 할당될 프로그램의 크기보다 작시 때문에 프로그램이 할당 될 수 없어 사용되지 않고 빈 공간

가변분할(세그먼트)은 하나의 프로그램을 모듈 단위로 쪼갠게 세그먼트임. 얘가 큰놈, 작은 놈, 

예를들어 한글도 각종 버튼들이 있는데, 그 버튼들이 다 모듈인데 어떤건 큰 것도 있고 어떤건 작은 것도 있는데 그 모듈별로 쪼갠게 세그먼트임. 그거를 주기억장치에 적재할 때 보면 못들어가는 빈 공간이 외부 단편화임. 

배치가 되지 못하고 남게 되는 빈 공간

 

https://m.blog.naver.com/hellomanggo_/220623825770

라) 단편화 해결방안

큰 공간이 있으면 됨 ㅎㅎ;

(1) 통합 기법: 프로그램이 종료가 되어 빈 공간이 생기면 하나의 영역으로 합침

(2) 압축기법: 프로그램이 종료가 되어 빈 공간이 되면 하나의 커다란 빈 공간으로 만듦 

-> 옛날에 디스크 조각모음이 이거임 ㅋㅋ

10) 집약성(Locality)

가상 기억장치나 캐시, 프로그램은 명령어의 집합인데, 캐시를 쓰는 이유가 잘 보니까 씨피유가 특정 명령어를 유난히 많이 쓰더라, 그럼 이제 아는거지. 이걸 속도를 높이려면 특히 자주 사용하는 명령어를 미리 캐시에 갖다 놓으면 시피유가 주기억장치까지 안가고 캐시에서 명령어를 쓰겠지 -> 컴터 속도가 빨라짐 

그래서 캐시를 쓰고 그 캐시를 쓰는 기본 논리가 집약성임. 골고루 명령어를 쓰는게 아니고 집중적으로 쓰더라 -> 자주 쓰는 명령어들을 속도가 빠른 캐시에다가 미리 갖다놓자. 

하나의 프로세스에는 프로세스 컨트롤 블록을 가지고 있음. 스테틱 데이터 코드를 갖고 있음. 

나. 프로세스(시스템) 메모리의 구조

1) 개념

2) 프로세스(시스템) 메모리 구조에서 각 영역에 대한 설명

가) 개념

나) Code(Text) 영역

프로그램 코드가 저장되는 영역

다) Data 영역

전역변수가 저장되는 영역

라) Heap 영역

개발자가 그때그때 가변적으로 사용 가능

마) Stack 영역

지역변수가 저장되는 영역

스텍은 푸쉬와 팝으로 돌아감. 번지를 짚으며 푸쉬가 되면 함수가 끝났을 경우 위의 값들을 팝하고 꺼냄 

3) 스택에서 후입선출 구조 응용

후입선출 구조(LIFO: Last in First Out)

4) 힙(Heap)

다. 캐시(Cache)

가) 개념

컴퓨터의 속도를 조금이라도 빠르게 하려고 주기억장치에서 자주 사용하는 명령어들을 캐시에 갖다놓음

보조 기억장치 -> 주기억장치 -> 캐시메모리 -> CPU

시피유가 원하는 명령어가 있으면 캐시에서 갖다 쓰고 그게 아니면 다시 주기억장치로 가서 엎어친 다음에 또 운영함.

미리 시피유가 101,102,103을 반복하네? -> 캐시 메모리에 갖다놓음 (그럼 컴퓨터가 조금 빨라지겠지! 싶어서 만듦)

주기억장치와 중앙처리장피(CPU) 사이에 있는 데이터를 저장해두는 임시 장소이다.

 

나) 캐시(Cache) hit을 극대화를 위한 지역성(Lacality)의 종류

CPU가 주기억장치에 있는 명령어를 골고루 안쓰고 특정지역의 명령어만 쓰더라 -> 그럼 캐시란걸 만들어서 명령어를 갖다 놓아 속도를 높여보자

- 공간적 지역성: 인접한 데이터들만 죽어라 참조하더라

- 시간적 지역성: 전에 쓴거 또 쓰더라

- 순차적 지역성: 1번쓰면 2번쓰고 3번쓰더라

다) 캐시메모리 교체 알고리즘(페이지 교체 기법과 유사)

램던은 임의로 교체

피포는 먼저 들어오는 순서대로

LFU는 사용횟수가 가장 적은 Page 교체

LRU는 가장 오랫동안 사용되지 않은 Page 교체

라) 캐시 대체 전략이 필요한 이유

(1) 즉시 쓰기 방식(Write Through): 시피유가 연산하고 결과를 캐시와 주기억장치에 둘 다 반영해 주는 것 . 이 경우 주기억 장치에 접근해야 하므로 느려질 수 있음.

그래서 나온게 

(2) 나중쓰기 방식(Write ack): 캐시 가지고 연산을 한 후 그 결과값을 주기억 장치에 덮어씌우는 것 -> 주기억장치에 접근하는 횟수가 줄어 속도가 빨라짐 -> 속도가 쁘른 대신 데이터 오류가 발생할 가능성이 높음.

라. 가상기억장치(Virtual Memory) -> 지금은 안씀

1) 개념

주기억장치의 용량은 작고 프로그램은 자꾸 커짐. -> 하드디스크의 일부를 램처럼 쓰는 것

속도가 느린데, 램처럼 쓰면 속도가 더 느려지더라;;

2) 가상기억장치의 특징

가상기억장치 고정분할(정적) Paging 기법

쪼갤 때 일정한 크기로 쪼갬.

가변분할(동적) Segmentation(세그멘테이션) 기법

모듈의 크기가 큰 놈 작은 놈에 맞추어 가변적으로 쪼갠 것임. 

3) 가상기억장치의 구현

가상 기억장치 구현 가상 기억장치의 구현 방법에 따라 세그먼테이션(가변블록)
페이징(고정블록)
페이징/세그먼테이션 혼용
사상표 색인을 찾는 방법에 따라 직접 사상 방법(Direct Mapping)
연관 사상 방법(Associative Mapping)
직접/연관 사상 혼용 방법

4) 세그먼테이션(Segmentation)

https://thebook.io/080367/0069/

가변블록임. 하나의 프로그램이 모조리, 작은 놈, 큰 놈, 완전 큰 놈 이런식임. 얘도 최대한 주기억장치 메모리에 맞추어 쪼개는데 적재하다 보면 어? 얘가 들어갈만한 충분한 크기의 연속된 공간이 없을 수도 있음 -> 외부 단편화의 발생 

가변분할은 내부 단편화는 발생하지 않음. 맨 마지막에 가장 큰 놈이 못들어가는 외부 단편화가 발생할 수 있음. 

세그먼테이션도 중간에 세그먼트 (맵) 테이블이 필요함. 

0번세그먼트는 1400부터 1000까지 -> 2000 이런식임.

만약 여기 4번 세그먼트의 크기가 3000이면 들어갈 곳이 없어 외부단편화가 발생함.

5) 페이징(Paging)

하나의 프로그램을 고정된 크기로 자르는 것. -> 주기억장치도 페이지에 맞추어 고정된 크기로 자름.

https://thebook.io/080367/0067/

보면 이미 메모리에 다른 프로그램이 쓰고 있음. 그럼 중간에 페이지  (맵) 테이블이 필요함. 

0번 페이지는 1번 프레임에 배치,  1번페이지는 4번 프레임... 이런식으로 집어넣음.

 

프로그램을 통으로 하면 안되고 얘를 처리하기 좋게 일정한 크기로 쪼갬(4/8/16/32 KB). 예를들어 70KB의 파일이 있다면 32KB씩 3개로 쪼갬(32,32,6) 주기억장치도 32,32,6으로 나눠 들어감 -> 내부 단편화가 발생함.

-> 그리고 동시에 외부 단편화는 발생하지 않음. 

6) 페이징/세그먼테이션 혼용

7) 직접 사상 방법(Direct Mapping)

8) 연관 사상 방법(Associative Mapping)

9) 직접/연관 사상 혼용 방법

 

3. 시스템 호출(System Call)

가. 개요

 

4. 장치관리

여기서 말하는 장치는 디스크임

가. 디스크 관리(Disk Management)

1) 디스크 관리의 개념

정보 기록 매체

하드디스크에 대해 볼거임.

https://whitesnake1004.tistory.com/273

액츄에이터 암 = 엑세스 암

-> 얘가 암 어셈블리에 물려서 왔다갔다 함. 그 다음에 고속을 회전하며 데이터를 읽음

헤드 = 헤더

https://charles098.tistory.com/119

여기 원판이 있음. 동그랗게 동심원으로 길이 있는데 그걸 트랙이라고 부름. 트랙이 마치 육상선수들이 트랙에 맞춰 뛰듯이 헤더도 트랙에 맞춰 데이터를 읽어옴.

섹터라는 것도 있는데 면적의 개념으로 부채꼴 모양으로 일정한 크기로 쪼갠 영역임. 위에서 보면 동그람. 안쪽 섹터와 바깥쪽 섹터가 있음. 저장용량은 안과 밖이 같음. 바깥이 면적이 더 크더라도 안쪽은 1010101010으로 저장하고 바깥쪽은 1  0  1  0  1  0  1  0 이런식으로 저장함.

원판을 세개만 그리고 잘 보면 위/아래가 있음. 암도 위/아래가 있음. '

1번디스크, 2번 디스크, 3번 디스크가 있다고 가정할 때 트랙이라고 하는건 헤더가 읽어오는 길임. 1번 디스크의 0번트랙, 2번 디스크의 0번 트랙, 3번 디스크의 0번 트랙은 하나의 암 어셈블리에 얘가 묶여있음. 데이터를 읽어올 때 이걸 같이 읽어옴 -> 실린더

하드에서 동일한 위치의 트랙을 묶어서 이걸 실린더라고 함. 실린더가 있는 이유는 병렬로 얘를 처리하기 위해서임. 면적은 안과 바깥이 다르나 용량은 같음. 

실린더: 그림보면 하나의 암 어셈블리에 3개의 디스크가 물려있음. 1번 디스크의 0번트랙, 2번 디스크의 0번 트랙, 3번 디스크의 0번 트랙이 있음. 즉 동일한 트랙을 묶어서 0번 실린더라고 함. 

분산저장: 트랙의 수와 실린더의 수는 같음 

 

2) 디스크 접근 시간(Disk Access Time)

가) 개념

나) 디스크 접근 시간(Disk Access Time)

- 탐색시간(Seek Time): 하드에서 데이터를 읽어올 때 크게 3가지 구역으로 나눌 수 있는데, 헤드가 트렉까지 가는데 걸리는 시간, 암 어셈블리가 회전을해서 트랙까지 가는데 걸리는 시간 -> 헤드가 트랙까지 가는 시간

- 회전 지연시간(Rotational Delay Time): 디스크판(플래터)이 회전해서 원하는 데이터가 있는 지점(섹터)이 헤드 바로 아래에 도착할 때까지 걸리는 시간 -> 트랙이 회전해서 헤드까지 도착하는 시간

- 전송시간(Transfer Time): 실제 헤드가 데이터를 읽어서 데이터를 CPU까지 보내는 시간 -> 실제 데이터가 이동하는 데 소요되는 시간-> 전기신호로 바꿔서 케이블을 통해 가져올 때 까지의 전송시간임.

■ 기억장치 관리
보조기억장치에 있는 것을 어떻게 CPU까지 가져올 것이냐에 대한 글임 -> 위 2.-6)에 나옴

3) Disk Scheduling의 종류

가) FCFS(First-Come First Served: 선입 선처리 스케줄링): 요청한 대로 가져옴. 

디스크 헤드가 53번 실린더에 있을 때 요청이 들어오면 큐에 들어온 순서대로 처리함. 

나) SSTF(Shotest-Seek First: 최소 탐색 시간 우선 스케줄링): 방향성이 있을 때 없을 때 다름

방향성이 없을 때: 53을 기준으로 거리를 봄. 거리를 재보고 n - 53해서 가까운 순서대로 왔다갔다 함. 

Starvation이 발생할 수 있음. -> 디스크헤드가 중간만 계속 왔다갔다하고 멀리까진 안가서 굶어 죽을지도..

10만대에 가야하는데 계속 들어오는 정보가 1000미만이라면 평생 10만대엔 가지 못하게 되니까...

다) SCAN(엘리베이터 알고리즘): 진행방향으로 끝까지 간 후 되돌아오며 데이터를 처리함.

옛날에 유럽 엘리베이터처럼 움직여서 이런 이름이 붙음.

방향성이 있을 때(안이냐 바깥이냐) 0번 방향으로 이동하면서 처리, 일단 0층까지 감. 그 다음에 올라감. 

0은 요청큐에 없지만 일단은 바닥까지 내려감. 

서비스 요청했을 때 바로 앞을 지났다면 끝까지 이동한 후 역방향의 요청을 서비스할 때 까지 기다려야 함.

56번 실린더 요청하던지 말던지 일단 0실린더까지 감 ㅎ; -> 자동차 와이퍼처럼 움직임

라) C-SCAN(Circular-SCAN): 옛날 타자기

타자기처럼 동작함. 옛날에 타자기 누르면 끝까지 가고 다시 처음으로 오지. 

맨 끝은 요청이 없지만 일단 감. 

항상 바깥쪽에서 안쪽으로 이동함 -> 한방향으로만 움직임 

마) C-Look(Cirular-Look) = LOOK Scheduling: C-SCAN의 단점을 보완

씨락은 데이터 요청이 있는데까지만 가고 아래로 내려옴. 아래도 데이터 요청이 있는 곳까지만 내려옴

나. RAID(Redundent Array of Inexpenxive/Independent Disks)

1) 개념

쓰는 사람 있을 듯! 동영상이나 이런걸 굉장히 많이 저장해야하거든. 하드가지고는 안되니까 레이드를 삼 

레이드 0부터 1,2,3,4.... 자신의 목적에 따라 구매하면 되는데, 대부분은 레이드 5를 삼, 성능과 안정성이 좋음.

 

레이드 왜 써요? -> 하드임.

 

레이드 싸다고 낼름사면 바깥 케이스+프로그램만 옴; 하드는 같이 안옴; 그냥 사면 내용물이 없음..하드는 직접 사서 끼워야함. 여러개의 하드를 묶어서 하나처럼 쓰겠다 -> 성능과 가용성을 잡겠다. 즉 하나의 대용량의 멀티미디어가 있으면 여러개의 디스크가 있을건데, 1번 디스크에다가 멀티미디어를 저장하면 2번과 3번은 작업이 없음. 그러면 작업시간만 딱 보면 1번 디스크에 여러개의 멀티미디어를 저장할 때 9초가 걸린다면 1번디스크에 1/3, 2번 디스크에 1/3, 3번 디스크에 1/3을 넣고 처리하면 병렬로 처리해서 3초 걸림 희희-> 성능향샹

가용성은 1,2,3 디스크에 똑같은 데이터가 중복되어 저장되어 있음. 장점: 디스크가 날라가도 돈 워리. 은행 등에서 이런 방식을 채택하여 사용함.

 

분복사바블패다

 

2) RAID 0 (Stripe, Doncatenate): 분산

그냥 디스크에다가 분산해서 저장

가) 특징

중복 저장하지않아서 디스크 장애시 자료 날라감

나) 장점: 효율 100%

다) 단점

3) RAID 1 (Mirroring): 복사

0번 디스크와 1번 디스크가 똑같음 똑같은걸 마치 미러링하고 있는 것, 복사 해 놓은 것

가) 특징

같이 움직임, 데이터를 완전 이중화하여 저장하는 방식

나) 장점: 디스크 중복 쓰기로 뛰어난 견고성을 가짐. 장애복구 가능

다) 단점: 공간효율 2배 떨어짐..

4) RAID 2 (Hamming Code ECC): 사장됨;  복잡하고 효과 없음 ㅠ

가) 특징: 해밍코드 쓰긴 함.

5) RAID 3 (Parity ECC): 바이트R0 +패리티

가) 특징: 바이트가 핵심임. 단위가 바이트 단위로 인풋/아웃풋함. -> 패리티 비트가 바이트 단위

페리티: 에러 체크용 부가정보
6) RAID 4 (Parity ECC, Block 단위 I/O): 블록

가) 특징: 패리티가 블록(한 덩어리)단위임. 크기는 만드는 사람 마음임.

7) RAID 5 (Parity ECC, Parity 분산저장): 패리티

가) 특징: 패리티를 분산 저장함. 

8) RAID 6 (Parity ECC, Parity 분산 복수 저장): 패리티 다중화

가) 특징

패리티를 다중화 한다는게 페리티 비트가 있음. R5는 패리티가 1개인데 얘는 2개씩 붙어있음

 

■ 패리티(Parity) 검사: 홀짝 맞추기

내가 데이터를 만들 떄 미리 약속함. 1의 갯수를 짝수로 맞추자
-> 1바이트가 있고 값이 1001 110이면 패리티는 0 : 짝수 패리티
이런식으로 맞춤. 참고로 홀수 패리티가 목적이었다면 1001 1101이 되겠지. 

통신할때도 미리 약속함. 에러 복구도 가능함. 블록합(Block Sum Check) 검사해서 
수평 패리티(↓)와 수직 패리티(→)를 추가하고 짝수로 하자? 하면 1의 갯수를 짝수로 맞춤 -> 스도쿠 같네..

블록 합 검사 - 짝수 패리티 비트
(아래 사진 참고) 
송신측에서 데이터를 쭉 전송함 -> 전송 중 오류가 발생했다 -> 오류는 0이 1이되었거나, 1이 0이 되었다 밖에 없음.
수신측이 오류난걸 받음. 근데 체크를 어케하냐, 1의 갯수가 짝수인걸로 받기로 함. 어 근데 5라인에 뭔가 문제가 발생했네? 하고 수직의 1의 갯수를 세봄. 수직 5라인이 오류네! 이렇게 함. 이걸 복구함. 

 

레이드 6는 패리티를 2개를 넣는데, 오바쌈바하지말라..