Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

운영체제 #17

Open
WonYong-Jang opened this issue Aug 14, 2018 · 1 comment
Open

운영체제 #17

WonYong-Jang opened this issue Aug 14, 2018 · 1 comment

Comments

@WonYong-Jang
Copy link
Owner

WonYong-Jang commented Aug 14, 2018

운영체제 개요

정의

  • 사람들 대신하여 컴퓨터 시스템의 각종 자원을 보다 효율적으로 관리하고 운영하는 시스템 소프트웨어
  • 사용자에게 편리성 제공하도록 하기 위한 컴퓨터 하드웨어와 사용자간의 매개체 역할을 하는 시스템 프로그램
  • 커널 : 운영체제의 핵심 요소, 하드 디스크 엑세스 부터 메모리 관리에 이르기까지 모든 것을 제어

목적

  1. 사용자에게 편리한 환경 제공
  2. 시스템의 성능 향상
  • 신뢰도(reliability)의 향상 ==> 시스템이 정확하게 작동되는 정도
  • 처리량(throoughput) 향상 ==> 일정시간 내에 시스템이 처리하는 일의 양을 극대화
  • 응답시간(response time) 단축 ==> 일의 처리를 컴퓨터에 지시하고 나서 결과를 얻을 때 까지 걸리는 시간
  • 사용가능도(availability) ==> 컴퓨터 시스템 내의 한정된 자원을 여러 사용자가 요구할 때, 신속하고 충분히 지원해 줄수 있는가

역할

  • 프로세스 관리, 기억장치 관리, 입출력장치 관리, 자원 관리

프로그램 빌드 되는 과정 (링커와 로더)

  • 링커 : 컴파일러가 프로그래밍 언어를 해석해서 기계어로 바꾸는 것이라면 링커는 컴파일러가 만든 결과물을 서로 연결시키는 역할을 함

  • 로더 : 컴퓨터 운영체제의 일부분으로, 하드디스크와 같은 저장 장치에 있는 특정 프로그램을 찾아서 주기억장치에 적재하고, 그 프로그램이 실행되도록 하는 역할을 담당

  • 로더의 기능

    1. 할당(Allocation) - 목적프로그램이 적재될 주기억 장소 내에 공간을 확보
    2. 연결(Linking) - 필요할 경우 여러 목적 프로그램 또는 라이브러리 루틴과 링크작업, 외부기호를 참조할 때 이 주소값들을 연결
    3. 재배치(Relocation) - 목적 프로그램을 실제 주기억 장소에 맞추어 재배치, 상대주소를 절대 주소로 변경
    4. 적재(Loading) - 실제 프로그램과 데이터를 주기억 장소에 적재

운영체제의 유형별 특징

일괄처리시스템(Batch Processing System)

  • 유사한 작업끼리 묶어서 한번에 한 작업씩 순서대로 처리하는 시스템

2018-08-14 3 52 13

다중프로그래밍 시스템(Multi-Programming System) : CPU 1개

  • 하나의 CPU로 여러 개의 사용자 프로그램이 마치 동시에 실행되는 것처럼 처리하는 방식
  • 한 프로세스가 입출력을 실행하는 동안 다른 프로세스에 CPU를 할당하여 실행 시킬 수 있다. ( 시스템 자원을 효율적으로 이용)
  • 여러 작업을 준비 상태로 두기 위해 메모리에 보관해야 하고 일정 형태의 메모리 관리가 필요하며, 준비상태의 여러 작업 중 하나를 선택하기 위한 결정 방법(스케줄링) 필요

2018-08-14 3 53 37

시분할 시스템(Time Sharing System)

  • 프로세서 스케줄링과 다중 프로그래밍을 사용하여 각 사용자에게 컴퓨터를 시간적으로 분할 하여 사용 할수 있도록 / 라운드 로빈 방식

2018-08-14 3 55 25

분산 처리 시스템

  • 시스템마다 운영체제와 메모리를 가지고 독립적으로 운영 되며 필요할 때 통신하는 시스템
  • 자원 공유, 연산속도 향상, 신뢰성, 통신 등의 목적으로 여러개의 물리적 프로세서에 연산을 분산시킬 수 있음
  • 단점: 보완성 문제

2018-08-14 3 58 22

다중 처리 시스템 : CPU N개

  • 여러개의 프로세서(CPU)를 이용해 신뢰성, 가용성, 컴퓨터 능력 증가등의 목적을 달성

  • 비대칭 주 / 종 다중처리 시스템 : 마스터 프로세서가 주가 되어 관리, 마스터 프로세서는 연산과 입출력 관리를 하며, 슬레이브 프로세서는 연산만 가능
    ==> 형태가 단순하지만 마스터 프로세서에 부하가 많아 신뢰도, 자원 사용에는 비효율적

  • 대칭 다중 처리 시스템 : 모든 프로세서 동일
    ==> 신뢰성이 높고 자원을 효율적으로 사용할수 있는 방식

2018-08-14 3 58 58

프로세스와 스레드

프로세스 정의

2018-08-14 7 37 29

  • 실행 중인 프로그램 ( 주기억장치 ,CPU에서 실행 하는 단위 / 동적인 개념 )

  • 비동기적(Asynchronous) 행위
    ==> 어떤 작업을 요청했을 때 그 작업이 종료될 때까지 기다리지 않고 다른 작업을 하고 있다가, 요청했던 작업이 종료되면 그에 대한 추가 작업을 수행하는 방식!

  • 디스크에 저장되어 있던 실행 가능한 프로그램이 메모리에 적재되어 운영체제의 제어를 받는 상태이다.

  • 운영체제에 존재하는 PCB(Process Control Block : 프로세스 제어 블록) 할당 받는 개체

  • 프로세스 1개당 PCB 1개 존재
    PCB(프로세스 제어블록) : 특정 프로세스에 대한 중요한 정보를 제공해 주는 데이터 블록
    ==> 프로세스를 생성 할때 만들어지며 주기억장치에 유지되며 운영체제 내에서 한 프로세스의 존재를 정의함, 프로세스의 실행이 종료되면 같이 삭제된다.

    1. 프로세스의 고유번호(PIN ; Process Identification Number)
      ==> 커널이 프로세스 관리하는데 있어서 편리성을 위하여 프로세스마다 다르게 부여되는 번호 / 프로세스 생성될때 부여 됨
    2. 프로세스의 우선순위 ( ex) 다른 프로세스와 경쟁 했을때 우선순위 )
    3. 프로세스 현재 상태(생성, 준비, 실행, 대기, 완료)
    4. 프로세스가 할당받은 자원 정보

인터럽트 : 컴퓨터 시스템에서 발생하는 예외적인 사건을 신속히 처리하기 위한 기법으로, 인터럽트가 발생하면 해당 인터럽트 처리 루틴을 먼저 수행한 후 원래의 프로그램으로 되돌아 온다.

문맥교환( Context Switching )

  • 프로세서를 다른 프로세스로 전환하려면 이전의 프로세스 상태 레지스터 내용을 보관하고, 다른 프로세스의 레지스터를 적재하는 과정
  • 여기서 context 에는 pc(프로그램 카운트), 레지스터, 프로세스 상태가 들어있음
  • 실행하던 프로그램이 중단되고 인터럽트 처리를 수행하기 전에 발생 !
    ( ex) 프로세스가 준비 -> 실행 / 실행 -> 준비 / )
    ==> 즉, CPU가 현재 처리 중인 프로세스의 PCB를 저장하고, 다른 PCB를 가져오는 것 !
  • 문맥교환은 모두 과부하 발생
  • 운영체제에서 문맥교환은 자주 발생하므로 가능한 효율적으로 구현되어야 하는데 이를 위해 스레드 사용 !

2018-08-20 2 26 15

스레드 ( Thread )

  • 프로세스와 마찬가지로 시스템의 여러 자원을 할당 받아 실행하는 프로그램 단위( 프로세스 안에서 실행되는 흐름의 단위)
    ==> 어떤 프로그램을 실행시킨게 프로세스 인데, 그 프로세스는 운영체제로 부터 프로그램을 돌리기 위해 메모리를 포함해서 이것저것 할당 받는다. 그리고 스레드는 프로세스에 할당된 자원을 마구 써재낀다.
    즉, 프로세스를 여러개로 나누면 스레드가 되는건데, 서로 프로세스에 할당된 자원을 함께 공유하며 처리
  • 명령어를 독립적으로 실행할 수 있는 하나의 제어 흐름 (고유한 레지스터 사용 ! , 스레드간 공유 X)
  • 한개의 프로세스가 처리할 양이 많을 때, 다수 개의 스레드를 통해서 동시에 처리 ==> 멀티 스레딩
  • 프로세스 생성이나 문맥교환 등 오버헤드가 줄어 운영체제 성능 개선
  • 멀티 스레드 : 여러 스레드가 독립적으로 작업을 병렬로 처리
    ex ) 수강신청을 100명이 동시에 하러 들어옴 -> A라는 사람이 수강신청을 하고 있을때 B라는 사람도 동시에 수강신청을 진행하는 것처럼 느껴짐 ( 여러 스레드 운용 )
    100개의 스레드를 사용했을때 101번째 학생의 수강신청은 100개 스레드 중 하나가 비어서 일을 처리할 수 있는 상태가 될때까지 기다리면 된다.

스케줄링 ( Scheduling )

  • 실행중인 모든 프로세스들에게 골고루 CPU를 할당 하는 일

스케줄링 하는 이유

  • 시스템 입장
    => cpu 이용률 증가
    => 일의 처리량 향상
  • 프로세스 입장
    => 반환시간
    => 대기시간
    => 응답시간

프로세스 스케줄링 종류

비선점 ( non-preemptive )

- 현재 실행중인 프로세스가 끝나야 다음 프로세스 CPU 를 할당

  • 우선순위 존재 X
  • 응답시간을 쉽게 예측 못함
  • 짧은 작업이 긴 작업을 기다리는 경우가 종종 발생

1) FCFS 스케줄링
- FIFO ( 준비큐에 도착한 순서에 따라 CPU를 할당 받는다)

2) SJF 스케줄링( Shortest Job First )
- 준비상태에 대기 중인 작업 중에서 CPU 사용시간이 가장 짧다고 판정된 것을 먼저 수행

2018-08-21 2 16 34

2018-08-21 2 17 36

3) HRN 스케줄링

  • SJF의 약점이였던 긴 작업과 짧은 작업간의 불평등을 보완하여 우선순위를 정하는 기법
    ==> (대기시간 + 서비스 받을 시간 ) / 서비스 받을 시간 ==> 계산한 것이 크다면 우선순위 높음 판정

2018-08-21 2 29 41

선점 ( preemptive )

- 현재 실행중인 프로세스보다 높은 우선순위를 가진 프로세스가 등장하면 스케줄러에 의해 실행 순서 조절

  • 높은 우선순위를 가진 프로세스 들이 빠른 처리를 요구하는 시스템에서 유용
  • 인터럽트와 문맥교환에 따른 오버헤드가 발생

1) SRT 스케줄링 ( Shortest Remaining Time First )
- SJF 에 선점 정책을 도입

2018-08-21 3 12 38

  • 단점: 기아현상 ( 시스템 부하가 많아서 낮은 등급에 있는 준비 큐에 있는 프로세스가 무한정 기다리는 현상)
    **에이징 기법 : **
  • 기아현상을 해결하기 위한 기법으로 오랫동안 기다린 프로세스에게 우선순위를 높여줌으로서 처리하는 기법

2) Round Robin

  • time-slice 정해놓고 그 시간만큼만 CPU 사용
  • time-slice 너무짧게 정하면 오버헤드 발생 <-> 너무 길게하면 FCFS 와 동일해짐

2018-08-21 3 16 02

3) 다단계 큐 알고리즘

4) 다단계 피드백 큐 알고리즘

병행 프로세스와 교착상태

임계구역 ( Critical Section )

다중 프로그래밍 운영체제에서 여러 개의 프로세스가 공유하는 데이터 및 자원에 대하여 어느 한 시점에서는 하나의 프로세스만 자원 또는 데이터를 사용하도록 지정된 공유 자원을 의미

  • 임계구역에는 하나의 프로세스만 접근 가능하며, 다른 프로세스의 진입을 막는다. (상호배제)
  • 여러 프로세스가 사용해야 하므로 구역 내 작업은 신속하게

상호배제 ( Mutual Exclusion ) 와 동기화

  • 상호배제 : 특정 프로세스가 공유 자원을 사용하고 있을 경우 다른 프로세스가 해당 공유 자원을 사용하지 못하게 제어하는 기법
  • 동기화 : 시스템의 자원은 한정적인데 이 한정적인 자원에 여러 스레드가 동시에 접근해서 사용하려면 문제 발생, 이런 문제 방지하기 위해 스레드들에게 하나의 자원에 대한 처리 권한을 주거나 순서를 조정해주는 기법

세마포어 ( Semaphore )

  • 프로세스의 순차적 처리를 위해 만든기법으로 프로세스들끼리 경쟁을 막아 원할한 자원 공유를 가능하게 함 !
  • 상호배제 해결을 위해 세마포어라고 부르는 새로운 동기 도구가 다익스트라에 의해 제안

모니터 ( Monitor)

  • 세마포어와 비슷한 역할을 하지만 제어가 쉽다.
  • 모니터 안에서 정의된 프로시저는 모니터 안에서 지역적으로 정의된 변수들과 형식적인 매개변수들만 접근할수 있다.

교착상태(Deadlock)

  • 프로세스들이 서로 작업을 진행하지 못하고 영원히 대기 상태로 빠지는 현상을 교착상태라고 한다. 이러한 교착상태가 발생하는 원인은 프로세스 사이에 할당된 자원의 충돌로 인하여 발생하게 된다. 예를 들어 A와 B라는 2개의 프로세스가 동작을 한다고 하자. 그리고 이들은 각각 a와 b라는 자원을 할당 받아 사용하고 있다고 가정하자. 이때 프로세스 A 에서는 작업을 계속 진행하기 위해서 b라는 자원을 요청하고 프로세스 B에서는 a라는 자원을 요청하게 되면 각각 프로세스가 요청한 자원이 이미 다른 프로세스에 할당되어 있기 때문에 할당이 풀릴 때 까지 대기 상태에 들어가게 된다. 그런데 A와B 프로세스 모두 상대방이 자원을 내놓기를 기다리면서 대기 상태로 들어가기 때문에 이들은 영원히 대기상태에 머무는 교착상태에 빠지게 되는 것이다.
    ==> 다중프로그래밍에서 한정된 자원을 사용할때 발생!

Deadlock 발생 조건 : 한 시스템 내에서 다음의 네가지 조건이 동시에 성립할 때 발생

  1. 상호 배제 : 자원은 한번에 한 프로세스만 사용 할수 있다.
  2. 점유 대기 : 적어도 하나의 자원을 보유하고 현재 다른 프로세스에 할당된 자원을 얻기 위해 기다리는 프로세스가 있어야한다.
  3. 비선점 : 자원을 강제로 빼앗을 수 없고 그 자원을 점유하고 있는 프로세스가 끝나야 그 자원이 해제 될수 있다.
  4. 순환대기 : 프로세스와 자원들이 원형을 이루며, 각 프로세스는 자신에게 할당된 자원을 가지면서, 상대 방 프로세스의 자원을 상호 요청하는 상황

교착상태 처리 기법

  1. 교착상태 예방(Prevention) : 교착상태 발생 조건 들 중 하나를 제거함으로써 해결 / 자원 낭비가 심함!

    • 상호배제 부정 : 여러개의 프로세스가 공유 자원을 사용할수 있도록 ///3개 아닌가? 확인할것 => 제외해야 되는지 확인 !

    • 점유와 대기조건 방지 : 프로세스가 실행되기 전 필요한 모든 자원을 할당

    • 비선점 조건의 방지 : 자원을 점유하고 있는 프로세스가 다른 자원을 요구할때 점유하고 있는 자원을 반납하고, 요구한 자원을 사용하기 위해 기다리게 함

    • 순환 대기 조건의 방지 : 자원에 고유한 번호를 할당하고, 번호 순서대로 자원을 요구하도록 함

  2. 교착상태 회피( Avoidance ) : 교착 상태가 발생하면 피해나가는 방법 / 은행원 알고리즘

    • 프로세스가 자원을 요구할때 시스템은 자원을 할당한 후에도 안정 상태로 남아있게 되는지를 사전에 검사하여 교착 상태를 회피하는 기법

    • 안전상태에 있으면 자원을 할당하고, 그렇지 않으면 다른 프로세스들이 자원을 해지할때 까지 대기함

  3. 교착 상태 탐지 ( Detection ) : 자원 할당 그래프를 통해 교착 상태 탐지

    • 자원을 요청할때마다 탐지 알고리즘을 실행하면 오버헤드가 발생
  4. 교착 상태로부터 회복 ( Recovery ) : 교착 상태를 일으킨 프로세스를 종료하거나, 할당된 자원을 해제함으로써 회복하는 것을 의미 / 프로세스 종료하는 방법

@WonYong-Jang
Copy link
Owner Author

WonYong-Jang commented Oct 22, 2018

프로세서와 프로세스의 차이

  • 프로세서란 하드웨어적인 측면에서 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛이다. 하나 이상의 ALU(Arithmetic Logic Unit) 와 처리 레지스터(Register)를 내장하고 있어야 한다. 결론적으로 프로세서는 CPU나 Microprocessor 라는 하드웨어를 말하는 것
  • 프로세스란 절차(과정) 실행의 단위이며 디스크에 작업의 과정이 파일로 저장되어 있다면 프로그램이라고 부르고 메모리에 적재되어 실행 중 이거나 실행 대기 중일 땐 프로세스라고 부른다.
    즉, 프로세스는 메모리에 적재되어 프로세서에 의해 실행중인 프로그램 이라고 정의

고아 프로세스와 좀비 프로세스

고아 프로세스

  • 부모 프로세스가 자식 프로세스보다 먼저 종료되면 자식 프로세스는 고아프로세스가 됩니다.

좀비 프로세스

  • 자식 프로세스가 종료되었지만 부모 프로세스가 자식 프로세스의 종료 상태를 회수하지 않았을 경우에 자식 프로세스를 좀비 프로세스라고 합니다.

PCB 에 대해 설명

  • 특정 프로세스에 대한 중요한 정보를 제공해 주는 데이터 블록
  • 프로세스 관리할 필요가 있는 정보를 포함하는 운영체제의 커널의 자료구조
    ==> 프로세스를 생성 할때 만들어지며 주기억장치에 유지되며 운영체제 내에서 한 프로세스의 존재를 정의함, 프로세스의 실행이 종료되면 같이 삭제된다.

프로세스의 고유번호(PIN ; Process Identification Number)
==> 커널이 프로세스 관리하는데 있어서 편리성을 위하여 프로세스마다 다르게 부여되는 번호 / 프로세스 생성될때 부여 됨
CPU 스케줄링 정보 : 프로세스의 우선순위 ( ex) 다른 프로세스와 경쟁 했을때 우선순위 ), cpu 점유시간 등
프로세스 현재 상태(생성, 준비, 실행, 대기, 완료)
프로세스가 할당받은 자원 정보

스레드 장점

  • Responsiveness ( 하나의 프로세스 안에 여러 스레드를 두게 되면, 보다 빠른 처리가 가능)
  • Resouce Sharing ( 하나의 프로세스 안에 여러개의 스레드를 두면 메모리 낭비를 줄일 수 있다. 메모리 공유하기 때문)
  • Economy ( 오버헤드 적기 때문에 경제적)
  • Utilization of MultiProcessor Architectures ( 병렬성 높힘)

스레드 종류 2가지

  • 커널 스레드 : 프로세스가 내 스레드가 여러 개라는 것을 운영체제가 알고 있는 스레드. 그래서 커널이 스레드 스케줄링을 맡아서 하게 된다.
  • 유저 스레드 : 라이브러리 차원에서 지원되는 스레드. 프로세스 안에 스레드가 여러개 있다는 것을 운영체제가 모르기 때문에 커널 입장에서는 하나의 일반적인 프로세스로 인식된다.

프로세스와 스레드 차이( 작업을 실행할때 자원을 할당 하는 단위 위주 설명)

  • 프로세스는 운영체제로부터 자원을 할당받은 작업의 단위이고 스레드는 프로세스가 할당받은 자원들을 이용하는 실행의 단위
    ==> 프로세스는 실행될 때 운영체제로부터 프로세서를 할당받고, 운영되기 위해 필요한 주소 공간, 메모리 등 자원을 할당 받는다. 독립적인 메모리 영역(Code, Data, Heap, Stack)
    ==> 스레드는 한 프로세스 내에서 동작되는 여러 실행의 흐름으로, 프로세스 내의 주소 공간이나 자원들을 같은 프로세스 내에 스레드끼리 공유하면서 실행 (프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역 공유)

  • 운영체제는 시스템 작업을 효율적으로 관리하기 위한 것이므로 이 목적을 더 크게 달성하기 위해서 스레드를 사용

  • 멀티 프로세스로 실행되는 작업을 멀티 스레드로 실행할 경우, 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원을 효율적으로 관리 할수 있다. 프로세스 간의 통신보다 스레드 간의 통신 비용이 적으므로 작업들 간의 통신의 부담이 줄어들게 됨
    (스레드가 프로세스보다 컨텍스트 스위칭이 빠른 이유 -> 메모리영역을 공유하기 때문 )
    -단, 스레드 간의 자원 공유는 전역변수를 이용하므로 동기화 문제 신경을 써야함(멀티 스레드 프로그래밍은 프로그래머의 주의를 요구함)

멀티 프로세스와 멀티 스레드 차이 (장단점 위주)

멀티 프로세싱

장점

  • 여러개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다.
    단점
  • Context Switching 에서의 오버헤드
  • 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어, Context Switching발생하면 캐쉬에 있는 모든 데이터를 모두 리셋하고 다시 캐시 정보를 불러와야 함
  • 프로세스 사이의 어렵고 복잡한 통신 기법(IPC) : 독립된 메모리 영역을 할당 받았기 때문에 하나의 프로그램에 속하는 프로세스 사이의 변수를 공유할 수 없다.

멀티 스레드

장점

  • 자원의 효율성 : 프로세스를 생성하여 자원을 할당하는 시스템 콜이 줄어들어 자원 효율적 관리
  • 시스템 처리량 증가( 처리 비용 감소) / Context Switching 이 빠름
  • 간단한 통신 방법으로 프로그램 응답 시간 단축 ( stack 영역을 제외한 모든 메모리 공유하기 때문에 통신 부담 적다)

단점

  • 주의 깊은 설계가 필요
  • 디버깅이 까다롭다
  • 하나의 스레드에 문제 발생하면 전체 프로세스가 영향을 받는다.

Tread Pool(스레드 풀) 이란 ?

  • 간단하게 스레드를 만들어 놓은 풀장 / 스레드를 생성할 때 메모리 공간을 확보해 주고 그 메모리를 스레드에게 할당해준다. 스레드는 동일한 메모리 영역에서 생성되고 관리되지만, 생성 / 수거에 드는 비용을 무시할 수 없다. 그렇기 때문에 요청이 들어올때마다 스레드를 생성하고 일을 다하면 수거하고 하는 작업을 퍼포먼스에 영향을 줄수 있기 때문에 스레드를 미리 만들어 놓는다.

2018-10-26 11 33 34

사용 이유 :

  • 프로그램 성능 저하 방지를 위해 스레드풀을 만들어 놓는다
  • 다수의 사용자 요청을 처리하기 위해서 (대규모 프로젝트에서 중요)

단점

  • 너무 많이 만들어 놓았다면 메모리 낭비만 발생 할수 있다.

-- code stack heap 안에 뭐가 있는지

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant