CS/운영체제

운영체제 - 정리

개발 일기92 2024. 6. 12. 16:05

1. 메모리 계층 구조 

  • 레지스터 -> 캐시 메모리 -> RAM -> 하드디스크 (레지스터에 가까울 수록 속도빠름)

2. 시스템 콜

  • OS의 커널 모드에 접근프로세스에서 호출 하는 함수.
  • 프로세스 제어, 파일, 장치 조작을 수행

3. 프로세스

  • 실행 중인 프로그램. 하나 이상의 스레드를 가짐.
  • PCB에 프로세스의 현 상태, PID, 부모PID 등을 저장.
  • 프로세스마다 독립된 메모리 공간을 가짐 ( 스택, 힙, 데이터, 코드 )
    • 스택: 지역 함수, 함수의 매개변수, 반환 주소 값 저장.
    • 힙 : 동적 메모리 할당
    • 데이터 : 전역, 정적 변수, 배열, 구조체 저장. 초기화 된 데이터는 데이터영역, 초기화X데이터는 BSS에 저장.
    • 코드 : 기계어
  • 프로세스의 상태
    • 생성(new) : 프로세스가 PCB를 가지고 있지만 OS의 승인을 받기 전 상태.
    • 준비(ready) : OS 승인 후 준비 큐에서 CPU할당 대기
    • 실행(running) : CPU할당 받은 후 명령어 실행
    • 대기(wating) : 입출력/이벤트 발생을 기다림. CPU사용 대기상태
    • 종료(terminated) : 프로세스 종료
  • 프로세스의 생성
    • fork() 함수 호출
    • 부모 프로세스는 자식 프로세스의 PID 반환, 자식은 0 반환.

4. 스레드 

  • 프로세스에서 실제 실행되는 흐름의 단위
  • 각 스레드는 스택 영역을 할당 받음.
  • 스택을 제외한 힙, 데이터, 코드 부분은 다른 스레드와 공유

5. 멀티 프로세스/스레드

  • 멀티 프로세스
    • 응용 프로그램을 여러개의 프로세스로 구성하는 것.
    • 하나의 프로세스보다 안정적임.
    • 콘텍스트 스위칭으로 인한 오버헤드 발생
    • 독립된 메모리 공간을 갖기 때문에 IPC로 공유
  • 멀티 스레드
    • 데이터 동기화 필요.(스택을 제외한 영역은 다른 스레드와 공유하므로)
    • 콘텍스트 스위칭 시 멀티 프로세스 보다 오버헤드가 적다.

6. 콘텍스트 스위칭

  • 멀티 프로세스 환경에서 CPU가 다른 프로세스 처리를 위해 실행중인 프로세스를 변경.
  • 처리하던 프로세스 정보를 저장하고 다음 처리할 프로세스를 레지스터에 로드하면서 오버헤드 발생

7. 프로세스 동기화

  • 멀티 프로세스 환경에서 공유 자원의 일관성을 보장하기 위한 방법.
  • 상호배제 기법
    • 뮤텍스 : 락을 가진 한 프로세스만 임계 영역에 접근
    • 세마포어 : 정해진 프로세스 개수만 임계 영역 접근

8. 교착 상태(4가지 조건. 조건 중 1가지를 제거하면 교착 상태를 피할 수 있다.)

  • 상호배제 : 하나의 공유 자원을 한 개의 프로세스만 사용할 수 있다.
  • 점유와 대기 : 프로세스가 최소 하나의 자원을 점유하고 있는 상태에서 다른 프로세스가 자원을 점유하기 위해 대기함.
  • 비선점 : 다른 프로세스에 할당된 자원을 뺏을 수 없음.
  • 환형 대기 : 프로세스가 자신의 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원 요구.

9. CPU스케줄링

  • 모든 프로세스를 공평하게 실행시키기 위함.
  • 스케줄링 알고리즘
    • FCFS(first come first serve) : 비선점형. 선입선출
    • SJF(shortest job first) : 비선점형. 실행 시간이 짧은 것 부터 실행.
    • RR(round robin) : 선점형. 타임 슬라이스 동안만 프로세스 실행 후 교체
    • SRTP(shortest remaining time first) : 선점형, 남은 프로세스 중 실행시간이 가장 짧은 프로세스 실행
      • (SJF , SRTP 차이? : SJF는 비선점형이기 때문에 프로세스 실행 전 가장 짧은 프로세스를 실행. SRTP는 실행 중 대기열에 짧은 프로세스가 있다면 실행 프로세스 변경.(오버헤드 발생) )
  • 스케줄러의 종류  
    • 장기 스케줄러 : 어떤 프로세스를 준비 큐에 넣을지 결정.
    • 중기 스케줄러 : 메모리에 로드된 프로세스 수 관리.
    • 단기 스케줄러 : 준비 큐에 있는 프로세스 중 어떤 프로세스를 CPU에 할당할지 결정.

10. 비연속적 메모리 할당

  • 페이징
    • 프로세스의 메모리 영역과 물리 메모리 영역을 일정 크기로 분할하는 방식
    • 프로세스 메모리 영역을 페이지로 나누고 물리 메모리 영역을 프레임으로 나눔
    • 내부 단편화 문제가 발생할 수 있음.
  • 세그먼테이션
    • 프로세스를 논리적 단위로 분할하는 방식
    • 데이터 보호가 쉽다.
    • 스택 세그먼트 영역에서 스택 오버플로 발생 가능함.

11. 가상 메모리

  • 프로세스의 일부만 메모리에 올림.
  • 많은 프로세스를 메모리에 로드할 수 있음.
  • 요구 페이징 : 필요한 페이지만 메모리에 로드, 페이지 폴트 발생할 수 있음.
  • 스레싱 : 페이지 폴트가 빈번히 발생하여 CPU이용률이 오히려 낮아지는 현상.

12. PCB(process control block)

  • 프로세스에 대한 정보를 저장하는 구조체.
  • PID, PC(다음 실행해야하는 명령어 주소값), CPU의 레지스터에 저장되는 정보 등이 저장됨. 

quiz) 프로세스와 스레드의 차이점

프로세스는 하나의 프로그램을 의미하며 실행의 단위이며 독립적인 메모리 영역을 갖는다.

스레드는 프로세스 내에서 실행되는 흐름의 단위이며 스택영역만 독립적이고 힙,데이터,코드 부분은 다른 스레드와 공유한다.

 

quiz) 스택/힙 오버플로란?

스택 오버플로는 메모리에서 스택 영역이 힙 영역을 침범할 때 발생한다. 예시로는 과도한 재귀함수 호출이 있다.

힙 오버플로는 힙이 스택을 침범할때 이고, 과도한 메모리 동적 할당이 있다.

 

quiz) 멀티 프로세스/스레드?

멀티 프로세스는 하나의 프로세스를 여러 개로 구성하는것. 프로세스는 독립적인 메모리를 갖기 때문에 자원 공유를 위해 IPC를 활용해야한다.

멀티 스레드는 한 프로세스 안에서 여러 스레드로 처리하는 것. 자원 공간을 공유하므로 스레드간 통신이 간단하고 멀티 프로세스 대비 콘텍스트 스위칭 비용이 적게든다.(레지스터에 로드해야하는 데이터 양이 더 적다.)

 

quiz) 동시성, 병렬성?

동시성은 하나의 CPU코어에서 작업을 번갈아 실행하는 것. 콘텍스트 스위칭과 오버헤드가 발생.

병렬성은 여러개의 CPU코어에서 여러 작업을 실행함.

 

quiz) 프로세스 동기화?

프로세스나 스레드가 공유 자원에 접근해도 일관성을 유지하는 것.

임계영역에는 상호배제 기법이 이뤄져야 동기화를 할 수 있는데 방법에는 뮤텍스와 세마포어가 있다.

 

quiz) 뮤텍스, 세마포어?

프로세스 동기화를 위한 상호배제 기법이다.

뮤텍스는 락을 가진 하나의 프로세스만 임계영역에 접근 가능.

임계 영역에 접근 가능한지 프로세스에서 반복문을 돌며 확인하는 스핀락이 발생한다.

 

세마포어특정 개수의 프로세스만 임계영역에 접근 가능.

임계 영역에서 작업 중이던 프로세스가 나가며 대기 상태인 프로세스를 깨우며 신호를 보내는 시그널링 메커니즘이 발생한다.

 

quiz) 스레드 안전이란? 구현 방법은?

하나의 자원/객체에 여러 스레드가 접근해도 프로그램 실행 시 문제가 없는 것을 의미한다.

자바에서 구현할 때 Synchronized 키워드를 사용해 구현하는데, 이는 임계 영역에 하나의 스레드만 접근할 수 있게하여 블록 단위로 락의 획득/해제가 발생한다. 블록을 크게 잡으면 성능 저하가 생길 수 있어 임계 영역을 최소화 해야한다.

 

quiz) 페이징/세그먼테이션?

둘다 비연속 메모리 할당 방식으로, 프로세스가 연속적으로 할당될때 발생하는 문제를 보완하는 기법이다.

 

페이징은 논리 메모리 영역과 물리 메모리 영역을 같은 크기로 나누고 각 영역을 페이지프레임이라고 한다.

메모리 할당 문제를 해결할 수 있지만 내부 단편화가 발생할 수 있다.

 

세그먼테이션프로세스를 논리적 단위로 분할한다. 프로세스의 메모리 영역을 분할 했기에 메모리 보호가 쉽지만, 외부 단편화가 발생할 수 있다.

 

quiz) 가상 메모리?

프로세스 전체가 아닌 일부만 메모리 영역으로 옮기고 나머지는 DISK에 옮겨 한정된 메모리의 영향을 덜 받고 많은 프로세스를 실행하기 위한 방법. 구현 방법으로는 요구 페이징이 있다.

요구 페이징이란 필요한 페이지만 메모리에 로드하는 방식.

 

quiz) 스레싱?

가상 메모리 환경에서 다중 프로그래밍 정도가 높아지며 페이징 폴트가 빈번히 발생해 cpu이용률이 오히려 낮아지는 현상. 

 

실제 시스템 작동 시간보다 페이지 교체가 더 많이 일어나 발생하는 문제이다.

예방법?- 워킹 세트를 설정하여 예방가능

워킹세트?- 지역성을 기반으로 자주 사용하는 페이지를 저장해 두는 것을 의미

 

페이지 폴트란 프로그램을 실행하다가 물리 메모리에 필요한 페이지가 없는 경우. 페이지 폴트 발생 시 디스크에서 필요한 페이지를 스왑한다.

 

quiz) 캐시 메모리란?

CPU에서 자주 사용하는 데이터를 접근 속도가 빠른 캐시 메모리에 저장.

CPU와 메모리간 속도 차이를 좁히기 위해 사용. 

적중률을 높이기 위해 자주 사용하는 데이터를 저장하는 지역성 원리를 사용한다.