본문 바로가기
몰라 컴퓨터 일반/운영체제(OS)

운영체제(OS)

by 몰라닉네임 2024. 2. 6.

아래 글은 CS 공부를 하며 작성한 글입니다. 

 

Process : 실행중인 프로그램을 의미. 운영체제와 상호작용함. 스레드가 모여있는 컨테이너.
 프로그램의 명령어와 정적데이터가 메모리에 적재되면 프로세스가 된다.
PID (Process ID) : 각각의 프로세스들을 구분하는 고유 식별자
Process Overlay : 현재 실행중인 프로세스 주소 공간에 새로운 응용프로그램을 적재해 실행시키는 방법 
Thread : 하나의 프로세스 내에서 실행되는 실행. 스케줄링의 단위. Thread가 모이면 Process가 됨.

Scheduling:
운영체제에서 여러개의 프로세스가 CPU에서 실행되는 순서를 결정하는 것
Multi - Thread
 : 하나의 프로세스 내에서 여러개의 스레드가 동시에 실행되는 것. 멀티스레드는 각각의 스레드의 작업에 영향을 주지 않고 동시에 작업을 할 수 있음.
Thread Synchroniation : 공유데이터에 접근하는 스레드가 충돌이 없도록 상호협력하는 것. 공유데이터에 대한 다수의 스레드 접근으로 공유데이터가 훼손되는걸 막기위해 만든 해결책 
Context Switching (문맥 교환) : CPU를 다른 프로세스로 전환하기 위해 이전의 프로세스 상태 레지스터 내용을 보관하고 다른 프로세스의 레지스터들을 적재하는 과정
Dead Lock (교착상태) : 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상을 의미 

 

 

운영체제의 정의

Operating System : 사람을 대신하여 컴퓨터의 각종 자원을 보다 효율적으로 관리, 운영하는 시스템 소프트웨어

 

시스템 소프트웨어 : 윈도우 XP , 리눅스, 컴파일러 , Operating System 

 

- Solaris 는 선 마이크로시스템즈사의 유닉스 운용체계 버전으로 주로 웹 서버용으로 많이 사용

- Kernel 은 메모리에 상주하면서 운영체제의 다른 부분 또는 응용 프로그램 수행에 필요한 환경을 설정하는 SW. 응용 프로그램에 필요한 다양한 서비스를 제공하고 실행되는 프로세스를 스케줄링함.

-

 

Process

 

- 병행 프로세스 : 여러개의 프로세스가 동시에 실행되는 것 

 

* 프로세스 상태 전이도 

-- 생성 : User 가 요청한 작업(프로세스)이 커널에 등록되어 커널 공간에 PCB 등이 만들어진 상태 

-- 준비(Ready) : 프로세스가 CPU 할당을 기다리는 상태 . Job Scheduler 가 작업을 선택하여 주기억장치에 적재. 

-- 실행(Execute) : Process Scheduler가 준비 상태의 프로세스트를 선택해 CPU에 할당 

-- 대기(Block) : 프로세스가 어떤 Event가 일어나기를 기다리는 상태. 실행중인 프로세스가 파일 입출력 완료를 기다리고 있는 상태 

-- 완료(Finish) : 할당되었던 장치, 메모리, CPU등 모든 자원 해체

-- 지연블록 : 프로세스가 대기(정지) 상태에서 기억장치를 잃은 상태

--지연상태 : 프로세스가 기억장치를 제외한 다른 모든 자원을 보유한 상태 

 

- PCB(Process Control Block): 운영체제에게 프로세스에 대한 정보를 제공해 주는 자료구조 테이블 

 

프로세스가 전이되는 시기와 이유

-Dispatch: 준비 상태 -> 실행 상태. 준비 상태의 프로세스들 중 우선순위가 가장 높은 프로세스를 선정하여 CPU를 할당.

단기 Scheduler에 의해 선택된 프로세스가 실질적으로 CPU를 할당받는 기능

-Time Run Out (할당시간 초과): 실행 상태 -> 준비 상태.

지정된 CPU의 할당시간을 모두 사용한 프로세스는 다른 프로세스가 CPU를 선점

-Wake Up: 입출력 신호가 들어오면 대기 중인 프로세스는 준비 상태로 전환 

 

Thread 

- Thread : 프로세스 스케줄링의 문맥 교환에 따른 부담을 줄여 성능을 향상

              : 각각의 스레드는 독립적인 제어흐름을 가지고 자신만의 스택과 레지스터를 가짐 

-Thread 의 공유영역 : 코드, 정정-전역 데이터, 힙, 커널 데이터 등 프로세스가 가진 자원

                  사유영역 : 스택, 프로그램 카운터, 레지스터 

 

-Thread 특징 : 스택 영역은 할당되는 것이므로 다른 쓰레드가 접근할 수 없다. 

 

- Data는 전역변수가 저장되는 영역

- 스택영역 : 함수 호출 시 지역변수, 매개변수, 인자(parameter), 복귀주소, CPU 레지스터 등의 정보가 저장되는 영역.

- 데이터 영역: 프로그램의 가상주소 공간으로 전역변수나 정적변수를 할당하고 실행하기 전에 초기화 

- Heap 영역 : 동적 메모리 할당을 위해 사용되는 공간이고, 주소값이 커지는 방향으로 증가. 스택과 Heap은 동적메모리.

 

다중 Thread의 특징

 - Context Switching (문맥교환) 효율성이 프로세스 간에 이루어지는 것 보다는 스레드 간에 이루어지는 것이 좋다. 

- 한 프로세스 내의 다중 스레드들은 그 프로세스에 할당된 자원(전역자원)을 공유하기 때문에 효율적.

- 한 프로세스 내의 스레드간의 통신은 서로 공유하는 메모리 영역으로 통신

- 다른 프로세스에 속한 스레드 간의 교착상태는 발생할 수 있다. 

 

 

프로세스 스케줄링(Process Scheduling)

- Non Preemptive(비선점 스케줄링) 의 종류 : FIFO, SJF, HRN, 비선점 우선순위.  CPU가 한 프로세스에 할당되면 CPU는 그 프로세스가 완료되기 전에는 빠져 나올 수 없음 그렇기 때문에 응답시간 예측가능 

- Preemptive(선점 스케줄링) 의 종류 : Round Robin, SRT, MLQ, MFQ, 선점 우선순위. 다른 프로세스가 현재 CPU를 할당 받은 프로세스를 중지시키고 그 CPU를 차지할 수 있음. 문맥교환으로 인한 많은 오버헤드 초래할 수 있음 

 

프로세스 스케줄링 알고리즘 
더보기

- FCFS (First - Come - First - Service) 스케줄링 (비선점) : 대기큐에 도착한 순서에 따라 CPU 할당. 일단 프로세스가 CPU를 차지하면 완료될 때까지 CPU 점유. 대화식 시스템에는 적합하지 않음 

 

- RR (Round Robin) 스케줄링(선점) : 각 프로세스는 같은 크기의 CPU 시간(Time Quantum)을 할당. 주어진 시간 내에 처리하지 못하면 CPU는 대기 중인 다음 프로세스에 넘어가고 시간을 모두 사용한 프로세스는 대기큐의 가장 뒤로 보내짐.

+ 한 프로세스가 CPU를 독점하는 폐단을 방지하기 위해 각 프로세스에게 할당된 일정한 시간(Time Slice)동안만 CPU를 사용하도록 하는 스케줄링 기법이다. 

 

- SJF (Shortest Job First) 스케줄링 (비선점) : 기다리고 있는 작업 중 수행시간이 가장 짧다고 판단되는 프로세스를 먼저 수행. 최소의 평균 대기시간을 가지나, 기아상태가 발생할 수 있음. 

 

-SRT (Shortest Remaining Time) 스케줄링 (선점): 새로 도착한 프로세스를 포함, 수행시간이 가장 짧다고 판단되는 프로세스를 먼저 수행. 짧은 대기 시간을 가지지만, 기아상태가 발생할 수 있음

 

- HRN (Highest Response ratio Next) 스케줄링 (비선점) : 에이징 기법으로 SJF의 스케줄링의 기아상태 해결. 우선순위 = (대기시간 + 서비스 받을 시간) / 서비스 받을 시간

 

- MLQ (Multi Level Queue)스케줄링 (선점) : 다단계 큐 스케줄링. 작업들을 여러 종류의 그룹으로 나누어 여러 개의 큐를 이용. 각 큐는 독자적인 스케줄링 알고리즘에 따라 그룹화된 작업 처리

 

- MFQ (Multi Level Feedback Queue)  스케줄링 (선점) : 프로세스가 큐들 사이를 이동하는 기법.

 

- 우선순위(Priority) 스케줄링 (선점 또는비선점 수행 가능) : 각 프로세스에게 우선순위를 부여하여 순위가 높은 순서대로 처리하는 방법. 기아현상 발생 가능.

 

- 기아상태: 특정 프로세스의 우선 순위가 낮아서 원하는 자원을 계속 할당받지 못하는 상태를 말함.

임계영역

-임계영역 : 둘 이상의 프로세스들이 동시에 공유할 수 없는 자원을 임계자원이라고 하며, 프로그램에서 이 자원을 이용하는 부분이 임계영역. 즉, 여러 프로세스가 병렬적으로 실행할 수 없고 직렬로만 처리됨. 공유데이터의 읽기와 쓰기 가능. 

 

-동기화요구 조건 

상호배제(Mutual Exclusion) : 한 프로세스가 임계구역에 들어가면 다른 프로세스는 임계구역에 들어갈 수 없도록 하는 조건. 두 프로세스가 하나의 공유 자원을 상호 배타적으로 사용(동시에는 사용 X)

제한된 대기 : 무한히 기다리는 바쁜대기 방지

진행 조건 : 무한정 연기 X

 

세마포어

-세마포어(P(s), V(s))는 임계구역 내에 하나의 프로세스만 허용하도록 하는 용도로 사용하는 기술 

- 세마포어에 대한 연산은 수행중에 인터럽트를 허용하지 않는다.

 

-세마포어의 단점은 busy waiting(바쁜 대기)을 요구하는 것이다. 프로세스가 임계영역에 들어가려고 하는 임의의 다른 프로세스는 입구 코드에서 계속해서 루프가 돌게 된다.

 

교착상태 (Deadlock)

-Dead Lock (교착상태) : 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상을 의미 

 

- 교착상태의 4가지 필요조건  (상-점-비-환)

1. 상호배제 (Mutual Exclusion) : 자원은 한 번에 한 프로세스만이 사용할 수 있어야 한다. 상호배제 기법에는 뮤텍스와 세마포어가 있다.

2. 점유와 대기(Hold and Wait): 최소한 하나의 자원을 점유하고 있으면서 다른 프로세스에 할당되어 사용하고 있는 자원을 추가로 점유하기 위해 대기하는 프로세스가 있어야 함.

3. 비선점(Non-preemption): 다른 프로세스에 할당된 자원은 사용이 끝날 때 까지 강제로 빼앗을 수 없음.

3. 환형대기 (Circular Wait): 서로 다른 공유자원을 사용하기 위해 대기하는 프로세스들이 원형으로 구성되어 있어 자신에게 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구함.

 

Dead Lock 해결방법
1. 교착상태의 예방 (발생조건 중 하나를 부정함으로써 교착상태를 예방)
2. 교착상태의 회피 (교착상태 발생 가능성을 인정하고 발생하려 할 떄 적절히 피해가는 방법, 은행가 알고리즘 이용)
3. 교착상태의 발견 (교착 상태가 발생하도록 허용하고 발생하면 조사하여 결정해 내는 방법)
4. 교착상태의 회복 (교착상태 사이클이 없어질 때까지 프로세스들을 종료시키거나 자원 할당을 중단)  

 

기억장치 관리 구분

-주기억장치 : CPU가 명령이나 자료를 직접 인출 혹은 반환할 수 있는 기억 장치 

-가상기억장치  : 주기억장치의 이용가능한 기억 공간보다 훨씬 큰 주소 지정을 할 수 있도록 하는 기법으로 가상기억장치는 디스크를 주기억장치의 확장된 공간으로 사용

 

다중 사용자 기억장치 할당기법

-고정분할 (정적 분할) : 주기억장치의 사용자 영역을 여러 개의 고정된 크기로 분할하여 관리. 내/외부 단편화 발생

-가변분할 (동적 분할) : 고정된 분할의 경계를 없애고 각 작업에 필요한 만큼 기억장치를 할당. 외부 단편화 발생(내부 X)

 

-단편화(Fragmentation) 

-내부 단편화 : 하나의 분할 영역에 작업을 할당하고 남은 빈 공간

ex) 30k 분할 영역에 20k 작업 할당 시, 10k 내부 단편화 발생

-외부 단편화 : 기억장치가 작은 공간들로 단편화 되어있어 공간 일부를 사용할 수 없음 ㅇ

ex) 50k 분할 영역에 90k 작업 할당 시, 50k 외부 단편화 발생 

 

가상 메모리 (Virtual Memory)

- 가상 메모리 : 논리적 주소와 물리적 주소를 분리하여 사용자가 주기억장치 용량을 초과한 프로세스에 주소를 지정해서 주기억장치를 제한없이 사용할 수 있도록 함 

- 가상 메모리는 프로세서의 이용률과 처리율을 향상시킬 수 있으나 응답시간이나 반환시간은 향상되지 않는다. (오히려 응답시간은 느려진다.)

 

- 페이지 부재(Page Fault) : 접근하려고 하는 페이지가 주기억장치에 존재하지 않는 경우

- 스레싱 : 다중 프로그래밍의 정도가 너무 높아지면 프로그램 실행(또는 수행시간)보다 페이지 교체가 더 많이 발생하므로 오히려 CPU의 이용률이 떨어지게 된다. 

가상기억장치의 구현 Virtual Memory

- 가상장치의 구현 : 보조기억장치(디스크)를 주기억장치의 확장된 공간으로 사용

 

페이징 세그멘테이션 
블록 사이즈 고정. 블록 사이즈 가변.
따라서, 내부 단편화 발생(외부 단편화 X).  따라서, 외부 단편화 발생(내부 단편화 X)
주소변환 테이블을 위한 추가 기억장소 필요.
(페이징의 크기가 작아지면 '페이지 테이블'의 크기는 커진다.)
공유와 보호 측면에서 페이징보다 쉽고 명확.

 

페이지 교체 알고리즘

- FIFO : 가장 오래된 페이지 교체

- LRU : 최근 가장 오랫동안 사용하지 않은 Page 교체 (참조된 시간 또는 순서에 대한 정보 필요)

- LFU : 사용빈도가 가장 적은 페이지 교체, 많이 참조된 페이지는 앞으로도 참조될 확률이 높을 것이란 판단에 근거 

 

쉘(Shell) 과 커널(Kernel)

- 쉘 기능 : 사용자 명령어 기능

 

- 커널 기능: 

사용자 프로세스 관리(스케줄러)

사용자 파일관리(File)

입출력 System 관리 

기억장치 관리(Memory)

 

참고

  • '컴퓨터일반 달달노트' 박태순 이성행 공저
  • '컴퓨터일반 기출문제집' 박미진 편저 

'몰라 컴퓨터 일반 > 운영체제(OS)' 카테고리의 다른 글

운영체제 면접  (0) 2024.02.22
무작정 운영체제를 공부하다가  (1) 2024.02.19