OS 기말 시험 대비

강준호·2021년 12월 7일
0

운영체제

목록 보기
13/14

Abstraction(구분) 이 무엇을 구분할 수 있도록 하는건지

abstraction이 무엇인가?

  • 하나의 운영체제가 컨트롤 해야하는 프로그램과 하드웨어 그리고 사용자가 여러개이기 때문에 이들을 구분지어서 관리할 필요가 있기 때문

Abstraction: Process

  • CPU와 같은 하드웨어 구성요소로 하여금, 각 프로그램을 구분하여 인식/실행 할 수 있도록 하기 위함

Abstraction: Address Space가 왜필요한지

  • 프로텍션 도메인: 서로가 서로의 주소 공간을 침범할 수 없게 하기 위해서
    1. 실행 컨텍스트의 보호 ex) 게임과 음악이 섞여 아이템이 사라질 수 도 있음
    1. 프라이버시 이슈. ex) 구분하지 않는다면 해커가 침입할 수 도 있음.

Abstraction: File

  • 어디까지가 프로세스의 바이너리 데이터인지, 해당 바이너리 데이터가 어디에 저장되어 있는지 관리/유지 하기 위해서

I/O 이슈

  • I/O 가 CPU보다 많이 느림. 근데 어떤 JOB이 계속 대기해야하면 CPU 낭비

이런 낭비를 막기 위해서

Spooling

  • 문서를 메모리의 버퍼에 로드 해놓고 프린터가 자신의 속도로 데이터를 가져옴. CPU는 자기 일 계속 할 수 있게

멀티 프로그래밍이 기존 배치와 다른점

장점

  • 메모리에 잡을 여러개를 동시에 놓을 수 있음
  • CPU가 쉬는시간을 최대한 줄일 수 있음

단점

  1. job1과 job2 를 실행한지가 구분이 없어(cpu에 실행중인게 뭔지 몰라)
  2. 어떤 job 에 우선순위를 줄것인가? 누구를 먼저 실행시킬 것인가? => 자발적인 양보가 없으면 스케줄링이 안됨

=> 타임

멀티 프로그래밍 vs 멀티태스킹

멀티 프로그래밍

  • 메모리에 여러개의 프로그램 동시에 다올리고 운영체제가 순차적으로 처리
  • 한번에 하나씩 처리

멀티태스킹

  • 타임 쉐어링을 통해 여러개의 테스크들이 CPU 같은 자원을 공유하는 방법
  • 정해진 타임 슬라이스 시간 동안 CPU를 점유하고 비켜서 작업들이 동시에 실행되는것처럼 보임

Policy와 메카니즘의 차이

Policy

  • 무엇이 되게 할것인가? (목적, 목표)
  • ex) 하이레벨에서 CPU 타임을 공정하게 하고 싶다

메카니즘

  • 무엇을 어떻게 할 것인가?(how, 도구)
  • ex) 타임쉐어링을 써보자

레이어링 장점 단점

장점

-독립적임: 고장난 레이어만 고치면 됨
-모듈러리티: 핵심 함수들끼리 레이어를 나눠서 각각을 나눔

불완전한 레이어링의 단점(MS-dos)

  • 오버헤드 발생
  • 보안 문제 ex) 은행 프로그램인데 app 레이어에서 bios에 접근해서 악의적인 문제 발생

시스템콜이 어떻게 불리는지

  • 시스템의 무결성 문제를 방지하기 위해 레이어에 접근할 수 있는 권한을 분리를 했음
  • 유저모드에서 커널레벨기능를 사용하기 커널을 통하는 메카니즘

모놀리틱 커널 vs 마이크로 커널

모놀리틱

장점

  • 시스템콜 불러도 커널 하나에서 컨트롤 할 수 있으니 overhead 적음

단점

  • 커널이 덩치도 크고 유기적으로 연결되어 있어 유지 보수어려움

마이크로

장점

  • 서비스가 따로따로 구현되어 있어 의존성 낮음.
  • 독립적인 개발 가능하고 유지보수 쉬움
  • 불필요한 서버는 종료시켜서 리소스,CPU,메모리 등 확보 가능
  • Mono 커널보다 안정적
  • 안정적인 의료 컴퓨터 분야에 적합

단점

  • 시스템콜 자주해서 낮은성능

프로그램을 프로세스로 바꾸는 과정

컴파일러

  • 소스코드를 Object 파일로 변환

링커

  • 여러 Obj 파일과 라이브러리들을 연결해 Exe로 변환

로더

  • Exe 파일을 실제 메모리에 올려주는 역할

    프로세스 컨트롤 블락(PCB)이 왜필요한지, 어떤걸 관리하기 위해서 필요한건지

    왜필요한지

  • 운영체제에서 여러가지 프로세스들이 각기 다른 프로세스라는걸 구분하기 위해서

    어떤걸 관리하기 위해서?

  • 프로세스 상태

  • 프로그램 카운터

  • CPU 레지스터

  • CPU 스케줄링 정보

  • 메모리 관리 정보

  • I/O 상태 정보

    컨텍스트 스위치가 왜 필요?

  • 타임쉐어링을 사용함으로 할당된 시간이 끝나면 다음 프로세스로 교체가 되어야한다. 이때 기존 하던 작업을 백업하고 로드 하는 과정(컨텍스트 스위치)가 필요하다

    컨텍스트 스위치란?

  • PCB에 있는 내용을 백업하고 복원하는 작업

  • 메모리에 백업하는것으로 I/O 작업이다. 이거 하고있는 동안에는 CPU가 아무것도 못함 => 성능 안좋음

    프로세스 구조에 따른 문맥전환 차이

  • 레지스터의 용량에 따라 백업/복원의 양이 달라짐.

  • 레지스터 용량이 클 수록 컨텍스트 스위치 오버헤드가 커질 수 있음. 반대로 작을 수록 오버헤드도 작음


병목현상

  • CPU 와 메모리, I/O 의 속도 차이가 너무 커서 CPU가 기다려야함

Interrupt vs Trap

Interrupt

  • 비동기적 이벤트 처리 ex)프로그램 실행과 상관없이 외부에서 발생하는 I/O

왜 프로그램의 상태를 저장하고 복원하는지?

  • I/O를 처리하기 위해 ISR 루틴으로 점프하고 다시 하던 일을 실행해야함으로

Trap

  • 동기적 이벤트 처리이기 때문에 실행상태를 저장하지 않음

Polling vs DMA

폴링 대비 DMA 장점

  • DMA 컨트롤러라는 프로세서가 CPU의 비서로 대신 I/O 해옴
  • CPU가 I/O 시간동안 다른 일 할 수 있어서 성능굳.

DMA가 I/O 를 처리하는동안 CPU가 할일이 있는경우 최대 성능 => Parallelism이 필요

폴링 대비 DMA 단점

  • 추가적인 하드웨어 (DMA 컨트롤러 프로세스)를 설치하는 비용이 많이듬

CPU와 I/O Burst 패턴

  • CPU Burst 주기가 적을 수록 frequency는 높아

비선점형 스케줄링 vs 선점형 스케줄링

비선점형 스케줄링(OS가 강제로 너 나와 못함)

  • 자발적으로 I/O를 하면서 양보를 하는 경우에만 다음 프로세스 실행

선점형 스케줄링(너 나와)

  • OS가 강제로 실행중인 프로세스의 수행을 정지시킬 수 있는

4가지 스케줄링 기법 어떤지 그림과 설명

First-come, First-served(FCFS)스케줄링

  • 먼저온 애 먼저라 운영체제가 관여할 수 없음
  • 대기시간이 랜덤 갸차임 => 짧은 대기시간을 항상 보장X

Shortest-Job-First 스케줄링

  • Job 짧은애부터 무조건 수행

비선점형에서는

중간에 끼어들기 못함

선점형에서는

돌고있어도 중간에 끼어드는 얘가 더 빠르면 끼어들기함

Priority 스케줄링

  • 미리 주어진 우선순위에 따라서 CPU 할당

기아상태가 어떤것?

  • Burst time이 긴편인 애는 시작이 빨라도 우선순위 애들한테 계속 밀림.

이를 해결할 수 있는 방법?

  • Aging 기법
    기다리는 시간에 따라 우선순위를 높여주자

라운드로빈 스케줄링

  • Time sharing과 유사
  • 선점형 방식
  • Time Quantum(일정시간) 만큼 지나면 너 나와
  • 큐를 정할때 1.스위칭 오버헤드 2.평균 버스트 타임 고려해야함
    ex) 큐가 클경우: =>FCFS 되서 의미X
    큐가 작을경우: context Switching에 필요한 시간보다 낮다면 효율 넘 떨어짐. (포카락로 생선 발라먹는 느낌)

장점

응답시간이 짧다

단점

문맥전환이 많음

멀티레벨 큐 스케줄링

어떤 방식인지?

  • ready 큐를 여러개 줘서 각각에 대해 다른 스케줄링 알고리즘을 부여
    => 프로세스들을 구분해줌

Shared 메모리 장단점

어떤 방식?

  • Read and Write 방식

장점

  • 공유메모리가 설정되면 그 이후의 통신은 커널 도움없이 바로 접근 가능

단점

  • 공유 메모리를 위해서 메모리 일부를 오직 그 목적으로 사용해야함.
  • 동기화 문제있음. => 누군가가 메모리 영역에 접근하는 순서를 정해줘야함 => Locking이나 세마포어가 대안

메세지 패싱

어떤 방식?

  • Send and Receive 방식

장점

  • 메모리 이슈없음
  • 커널이 동기화제공함

단점

  • 커널을 항상 통해야함. => context switching 발생 => 성능 안좋아짐

소켓

  • 프로세스의 위치와 상관없이 Remote 통신 가능
  • 포트를 이용하여 통신하는 방식
  • 다른 IPC와 달리 프로세스가 같은 PC에 있던 멀리있던 통신을 할 수 있음.
  • Local끼리는 포트번호, 다른 PC면 IP주소+포트 번호

쓰레드

  • 프로세스 내의 실행흐름을 의미

장점

  • 프로세스에서 할 작업을 여러개로 나눈후 각각을 쓰레드화하면 병렬적으로 빨리 작업완수 가능

단점

  • 쓰레드도 프로세스만큼은 아니지만 context switching overhead가 있음.
    그래서 쓰레드의 수가 임계점을 넘어가면 효율 감소

프로세스와 쓰레드의 차이(자료구조 관점)

프로세스

  • PCB 전체를 갖고 코드데이터 영역을 독립적으로 갖음
  • 프로세스 간에 컨텍스트 Switch 비용이 큼

쓰레드

  • 프로세스의 코드, 데이터 영역을 쓰레드간에 공유
  • 컨텍스트 스위치 비용도 상대적으로 적음.

유저쓰레드와 커널 쓰레드의 매핑

many-to-one

  • 여러개의 유저쓰레드가 하나의 커널쓰레드로 매핑되는것

단점

  • 하나의 쓰레드가 커널에 접근(시스템콜)하면 나머지 쓰레드는 대기해야 = 병렬성과 거리가 멈

one-to-one

  • 각각의 모든 유저 쓰레드를 각각의 커널 쓰레드에 매핑!

장점

  • 쓰레드와 커널이 한 조가 되니까 시스템콜 호출 시 다른 쓰레드들이 Block 되는 문제 해결
    -여러개의 쓰레드를 멀티프로세서에서 동시 실행가능 = 병렬 가능!

단점

  • 커널 쓰레드도 한정적이기 때문에 무한으로 즐길 수 없음

many-to-many

  • 유저쓰레드가 실제로 동작하거나 필요할 때만 커널 쓰레드들을 매핑해주는 방식

장점

  • 가능한 만큼만 만들기 때문에 One-to-One 보안
    -시스템 콜해도 Block 되는 현상도 해결

동기화를 잘못해서 발생하는 문제(예시로)

  • 은행 입출금 문제
  • 입금 처리와 출금 처리를 동시에 할때
    int balance =1000;에서
    balance += 500;
    balance -= 500; 을 동시에 수행

동기화가 잘 되지 않으면
register1 = balance + 500 (register 현재 1500)
register2 = balance - 500 (register 현재 500)

balance = register1 (balance 현재 1500)
balance = register2 (balance 현재 500)
해서 500원이 먹히는 사태가 발생할 수 있음

동기화를 하기 위해 만족할 3 조건

상호배제

  • 한 프로세스가 Critical 섹션에 진입해 있다면 다른 프로세스는 진입 불가!

진행

  • 프로그램이 잘 진행되기 위해서 바톤터치가 잘 이루어져 매끄러운 진행이 되야함

Bounded Waiting

  • 다른 애들에 치여서 못나가는 애들은 기다리는 시간이 너무 길지 않도록 LImit 를 설정해 줘야함. =(우선순위 aging 처럼)

명령어를 이용해서 동기화를 이용하는게 좋은이유

  • 하드웨어에서 특정시간동안 실행되는 명령어는 오직 하나임을 이용함.
  • 동기화를 위한 변수들도 공유자원이기 때문에 데드락현상 발생할 수 있음
  • 저 변수에 접근할때 다른 프로세스들이 접근 못하게 명령어 사용.

세마포어-Busy Waiting

어떤방식?

  • s라는 세마포어 변수를 설정하고 루프 식을 돌게 두며, 줄어든값에 기반해 어떤 프로세스를 먼저 내보낼지를 정하는 방식

장점

  • 기존 명령어로 해결하지못한 Bounded Waiting을 해결

단점

  • 계속 loop를 도는 방법 => CPU 사이클을 낭비함. =>기다리는 프로세스 수가 많아질수록 낭비 사이클은 더 커짐.
  • 누가 Critical 세션에 진입할지 결정되지 않음

세마포어-Sleep Queue

어떤방식?

  • 슬립 큐를 추가해서 대기중인 프로세스를 관리하는 방식.
  • 세마포어의 값이 양수가 되어 critical section에 진입 가능하면 대기중인 프로세스를 깨워 실행시킴

장점

  • 누가 critical 세션에 진입할지를 결정할 수 있게됨

데드락

이게 뭐야?

  • 서로에게 필요한 락을 서로가 잡고 있어서 교착상태에 빠지는것

모니터

하이레벨에서 동기화를 제어함으로서 얻는 장점?

  • shared 메모리를 사용하기 위해 반드시 모니터에 진입해야함으로 쉽게 동기화 문제를 해결할 수 있음

철학자의 식탁

데드락이 발생하는 이유?

  • 자원이 한정적이기 때문.

starvation 이 어떻게 발생하는지?

  • 어떤 프로세스(철학자)는 자원을 사용하려면 기다려야 하기 때문에 발생

starvation 해결법?

  • 왼쪽 친구와 오른쪽 친구가 먹고 있지 않을 때 Critical Section에 진입함(필요한 자원이 모두 사용가능할때만 자원에 접근)

동기화 문제 해결하기 위한 체크요소들

Data Consistency(일관성)가 확보되었는지

데드락이 발생하는지

  • 실행을 보장하지 못하기 떄문

Starvation의 가능성이 있는지

  • 프로세스들이 공정하게 실행되는지

이게 다 만족되고 나서...

Concurrency(병렬성)를 얼마나 제공하는지

  • 성능에대해 생각

메모리관리가 왜 필요한지?

  • 컴퓨터의 메모리는 한정적인 자원이라서

페이징

페이징이 뭐야?

  • 현재 실행되고 있는 코드부분만 메모리에 있으면 프로세스가 실행이 가능. 이걸 페이지단위로 쪼개서 관리를 하자

왜 출현하게된 배경?

  • 매핑이 필요하기 때문
  • 프로세스 수는 점점 증가하지만 메모리는 한정적이기 때문

가상메모리

Baisc 아이디어

  • 프로세스가 수행되기 위해 모든 프로그램이 실제 메모리에 있을 필요가 없음. 현재 실행되고 있는 코드 부분만 실제 메모리에 있으면 프로세스는 실행이 가능하기 때문

페이징에서 데이터를 접근할때 항상 왜 두번의 메모리 접근이 필요한지

  • 페이지 테이블이 물리 메모리에 있기 때문.
  • 페이지테이블에서 매핑정보 얻느라 한번, 그 매핑정보로 다시 메모리에 가기 때문에 한번. => 메모리 접근 속도가 떨어질 수 있음

TLB(해결방법)

  • 레지스터이기때문에 빠름
  • locality를 살려서 자주 사용되는 매핑 정보를 미리 저장해놓음

멀티레벨, 인버티드 페이지 테이블

왜 멀티레벨, 인버티드 페이지 테이블 필요?

  • 페이지 테이블 자체의 크기가 커졌기때문

멀티레벨 페이지 테이블이란?

  • 페이지 테이블의 페이지 테이블

인버티드 페이지 테이블이란?

  • 기존에는 페이지의 개수를 기준으로 프레임을 검색함. => 페이지 개수에 따라 용량이 늘어남.
    반면, 인버티드 페이지 테이블은 물리 메모리를 index로 만듬. => 한정된 용량 만큼만 페이지테이블이 만들어짐.

Locality

로컬리티를 고려하면 왜 성능이 이득인지?

  • 필요한 페이지만 메모리에 올려서 사용하다보니 (loop를 도는동안) locality에 의해서 계속 비슷한 영역 사용이 예측되기 때문

Page Replacement

어떻게 하는게 좋은 페이지 replacement 인지? 왜 그런지?

  • I/O작업횟수를 줄일 수 있기 때문에 페이지 Fault 빈도를 낮추는게 가장 좋은 알고리즘.
  • 다시 참조되지 않는 페이지를 먼저 replacement 하는게 중요

LRU 알고리즘(예시)

이게 뭐야?

  • 가장 오랜 시간 참조되지 않은 페이지부터 먼저 교체함
  • 페이지 사용의 Locality(지역성)을 고려하여 Optimal 알고리즘이 되려고함

Swapping

이게 뭐야?

  • 프로세스 전체를 스토리지로 보내버리는 것

왜 필요?

  • 페이지 아웃 만으로 메모리 부족을 해결하지 못할때 필요

ExternalFragmentation이 뭐야?(그림으로)

이게 뭐야?

  • 남은 메모리는 충분하지만 그 공간들이 연속적이지 않아 사용할 수 없는 경우 => 아무 위치에나 박을 수 있는 NO 파티션이 해결방안

  • 560 남아서 p5 할당할 수 있는데 자리가 부족해 좀더 시간을 기다려야함 => 페이징을 이래서 써야함


    Contiguous Allocation vs Linked List Allocation using an Index

Contiguous Allocation

  • 파일을 물리적으로 연속된 디스크 블럭에 저장한다

장점

  • 구현 쉬움
  • 물리적으로 연속된 공간에 있어서 전체 파일을 통으로 읽을때 성능 굳굳

단점

  • 파일은 반드시 한번에 끝까지 기록되어야함
  • 운영체제에서 파일의 끝에 예비용 Block을 남겨놓을 경우 디스크 공간 낭비

Linked List Allocation

  • 디스크의 Block을 링크드 리스트로 구현하여, 파일의 데이터를 저장하도록 함

장점

  • 파일의 Data Block은 디스크의 어디든지 위치 가능
  • 공간의 낭비가 없음

단점

  • Random Access 불가능
    (파일의 특정 위치를 찾기 위해서는 해당 파일의 시작 Node부터 찾아가야함)

  • Pointer 사용으로 인해 데이터 저장 공간이 반드시 2의 배수가 아닐 수 있음 => 성능 저하

  • Disk block pointer의 크기를 결정하는 요소는 번호 번호가 많을 수록 크기가 커짐

아이노드가 나오게 된 배경

  • 기존에는 디스크 블럭에 대한 포인터 수가 한정되어 있기 때문에 최대 파일의 크기가 고정되었음.
    =>아이노드의 데이터 블럭 인덱스들을 테이블 형태로 관리하는 방법으로 해결

0개의 댓글