개발! 딱 깔끔하고 센스있게!

운영체제 정리 본문

과제정리

운영체제 정리

렉사이 2020. 5. 23. 20:59

운영체제

 


1주차 1강

 

운영체제

  • 컴퓨터를 동작시키는 소프트웨어

 

컴퓨터 시스템 구성요소

  • 하드웨어 : 데이터를 처리하는 물리적 기계장치 (프로세서, 버스, 메모리 등)
  • 소프트웨어 : 명령어로 작성된 프로그램
  • 운영체제
    • 하드웨어와 사용자 사이에 위치
    • 하드웨어와 소프트웨어 자원을 관리하는 프로그램
  • 컴퓨터 시스템의 핵심요소
    • CPU <> RAM <> HDD
  • 프로세서
    • 각 부분의 동작 제어 및 연산 수행
    • 중앙처리장치 : 레지스터, 산술 논리 연산장치, 제어장치
    • 마이크로 프로세서 : 주기억장치를 제외한 레지스터, 산술 논리 연산장치, 제어장치를 칩하나로 구성, 개인용컴퓨터
  • 버스
    • 내부버스 : 프로세서 내부의 레지스터, 연산장치, 메모리 연결
    • 외부버스 : 시스템버스, 입출력장치간
    • 데이터버스 : 데이터가 지나가는 통로
    • 주소버스 : 다른장치로 주소정보를 전송
    • 제어버스 : 수행중인 작업상태를 알리는 단방향 버스
    • 프로세서와 각 장치간 또는 서브시스템을 서로 연결하여 종보를 주고받게하는 통로
    • 데이터 입출력신호, 프로세서 상태신호, 인터럽트 요구와 허가신호
    • 위치에 따른 분류
    • 기능에 따른 분류
  • 레지스터
    • 사용자 프로그램을 통해 접근 가능한 데이터
    • 프로세스의 제어와 상태관리
    • 프로그램 카운터, 명령어 레지스터, 상태 레지스터, 메모리 주소 레지스터, 메모리 버퍼 레지스터
    • 프로세서에 위치한 고속메모리, 바로사용하도록 데이터 저장
    • 사용자 가시 레지스터
    • 사용자 불가시 레지스터
  • 메모리
    • 메모리 참조가 지역성(국부성) 이라는 특징
    • 지역성 : 실행중인 프로세서가 실행기간동안 메모리를 균일하게 접근하지않고 블록중 일부만 집중적 참조하는 현상
    • 발생이유 : 명령어를 순차적으로 실행하는 경향, 순차적으로 자주접근
    • 원시 프로그램을 기계명령어로 변환처리과정
    • 메인 메모리의 유효 크기를 늘리는 기법
    • 보조기억장치에 프로그램이나 데이터를 저장했다 필요시 메인 메모리로 이동시키는 기술
    • 가상 메모리를 활용하기위해 참조하는 주소와 메모리에서 사용하는 주소 분리해야함 (매핑)
    • 메인 메모리보다 큰 용량의 주소를 지정가능
    • 실제사용하는 부분만 실제 메인메모리, 그외는 보조기억장치로 매핑
    • 프로레서와 메인 메모리 사이의 고속버퍼
    • 데이터가 이동할수있는 통로를 확대하여 프로세어와 메인 메모리 속도 차를 줄임
    • 태그 영역으로 나눠서 동작
    • 메모리 계층 구조
    • 메인 메모리
    • 다수의 셀로 구성되며 각 셀들은 비트로 구성
    • 셀은 주소에 의해 참조됨
    • 물리적주소 공간
    • 논리적주소 공간
    • 컴파일
    • 메모리 접근 시간 : 명령 발생후 목표 번지를 검색하여 데이터 쓰기를 시작할때 까지의 시간
    • 메모리 사이클 시간 : 두 번의 연속적인 메모리 동작 사이에 필요한 최소 지연시간
    • 가상메모리
    • 캐시
  • 주변장치
    • 입력장치, 출력 장치, 보조기억장치, 스캐너, 모뎀등

 


1주차 2강

 

운영제체의 역할과 목적

  • 하드웨어와 응용 프로그램간의 인터페이스 역할, 컴퓨터 자원관리, 사용자 편의제공

 

운영체제의 역할

  • 하드웨어와 사용자간의 인터페이스를 정의
  • 사용자들이 하드웨어를 공동으로 사용할수있도록 해줌
  • 사용자간의 자원 스케줄링, 자원 할장자역할 수행
  • 입출력 보조 역할
  • 오류처리
  • 시스템 소프트웨어
    • 시스템 전체를 작동, 인터럽트관리, 장치관리, 언어번역
  • 커널
    • 운영체제의 핵심, 메모리에 상주

 

운영체제의 목적

  • 편리성 : 사용자에게 편리한 환경 제공
  • 효율성 : 자원을 효과적으로 사용
    • 처리능력(Throughtput) : 시스템의 생산성을 나타내는 지표, 단위 시간당 처리하는 작업량
    • 신뢰도 : 실패없이 기능 수행하는 능력
    • 응답 시간(Thrn Around Time) : 시스템에 작업을 의뢰한 시간부터 반응을 얻을 때까지의 시간
    • 사용가능도 : 가동률, 사용자가 실제로 컴퓨터를 사용한 시간

 

운영체제 기능의 발전

  • 초기의 컴퓨터
    • 작업별 처리 시스템
    • 속도가 느림, 하드웨어만 있어 콘솔로 기계어 작성
    • 일괄 처리시스템
    • 상주모니터 : 초기의 운영체제 형태

버퍼링

  • 입출력장치의 느린속도를 보완, 유휴시간이 없도록 동시에 수행하는 기능

스풀링

  • 프로세서가 다른부분을 판독하는 동안 추가로 기록할수없는 문제해결, 추가기록이 가능한 디스크 특성을 이용
  • CPU의 이용률을 향상을 위해, 다양한 입출력장치를 이용하기위해

 

운영체제 유형별 특징

  • 다중 프로그래밍 시스템
    • 프로세서가 항상 수행할 작업을 가지도록하여 프로세서 이용륭 증진
    • 인터럽트를 이용하여 수행하는 프로세서 스케줄링
  • 시분할 시스템
    • 다중프로그래밍을 논리적으로 확장한 개념, 다중작업을 교대로 수행
    • 프로세서 스케줄링과 다중 프로그래밍을 사용해 각 사용자에게 시간적으로 분할
    • 대화식 입출력
  • 일괄처리 시스템
  • 분산처리 시스템
  • 다중 처리 시스템
    • CPU를 여러개를 연결, 시간당 처리량증가
    • 주/종 다중처리 시스템(마스터/슬레이브) : 비대칭구조

 


2주차 1강

 

운영체제 발전과정 

  • 제0세대 (1940년대 )
    • 운영체제없음
    • 기계어사용
  • 제1세대 (1950년대 )
    • IBM701(운영체제효시)
    • 작업간의원활한변환
    • 버퍼링, 스풀링, 일괄처리시스템
  • 제2세대 (1960년대초 )
    • 고급언어로운영체제작성
    • 장치독립성
    • 다중프로그램밍, 다중처리, 시분할시스템
  • 제3세대 (1960년대중반~ 1970년대중반 )
    • IBM360 시리즈, 유닉스
    • 범용시스템
    • 다중모드시스템
  • 제4세대 (1970년대중반~ 현재 )
    • 네트워크시스템
    • 가상머신, 분산데이터처리
    • 개인컴퓨터

 

운영체제 기능

  • 자원관리기능
    • 메모리 관리
    • 보조기억장치 관리
    • 프로세스 관리
    • 장치관리 (입출력 관리)
    • 파일관리
    • 시스템보호
    • 네트워킹
    • 명령어 해석기와 시스템관리

운영체제 서비스

  • 부트스트래핑 서비스
    • 운영체제가 적재되는 과정을 부트스트래핑 또는 부팅이라고 함
  • 사용자 서비스
    • 사용자 인터페이스
    • 프로그램 수행
    • 입출력동작
    • 파일 시스템 조작
    • 통신
    • 오류탐지
  • 시스템 서비스
    • 사용자가 아닌 시스템에서 효율적인 동작을 보장하는 기능
    • 자원할당
    • 계정
    • 보호
  • 시스템 호출서비스
    • 프로세스 제어
    • 파일조작
    • 장치 조작
    • 정보관리
    • 통신

 


2주차 2강

 

프로세스 개요

  • 프로세스 개념
    • 메모리에 주소 공간을 갖는 능동적인 개체
      • 실행 스택 : 호출된 프로시저의 복귀주소와 지역 변수등 일시적인 데이터 저장영역
      • 실행 힙 : 텍스트 영역과는 별도로 유지되는 자유 영역
      • 데이터 : 변수 저장
      • 텍스트 : 프로세서가 실행하는 코드 저장
    • 재진입 프로그램(재진입 코드)
      • 여러 사용자가 공유할수 있도록 작성된 프로그램 또는 루틴
    • 프로세스는 사용자 관점에서 세그먼트의 가상 주소 공간을 갖는 상태 의미

 

프로세스 관리

  • 프로세스 종류
    • 운영체제 프로세스 : 커널 프로세스, 실행순서제어, 감시, 시스템 운영
    • 사용자 프로세스 : 사용자 코드 수행
    • 병행 프로세스 : 프로세스가 여러개 동시에 실행
      • 독립 프로세스
      • 협동 프로세스
  • 프로세스 상태
    • 실행과 비실행 구분
    • 프로세스 상태변화
      • 종료되어 시스템을 떠날 때까지 준비, 실행, 대기 상태로 변화 반복
      • 작업 스케줄러
        • 스풀러가 저장한 작업을 선정, 준비리스트에 삽입
        • 다중 프로그래밍의 정도를 결정
        • 프로세스 상태변화
      • 준비 > 실행
        • 디스패치(Dispatch) : 준비 리스트 맨앞에 있는 프로세스가 프로세서를 선택배당
        • 시간할당 : 일정시간만 사용시간할당, 독점방지
      • 실행 > 대기(보류)
        • 실행 프로세스가 지정 시간전 입출력 연산등이 필요할때 스스로 프로세서 양도
      • 대기(보류) > 준비
        • 깨움(Wake Up) : 입출력 작업이 끝났을때 발생
    • 프로세스 제어블록(PCB)
      • 프로세스를 관리 유지
      • 프로세스 생성시 만들어지고 메모리에 유지, 존재 정의
      • 프로세스 식별자 : 프로세스 고유 식별자지정
      • 프로세스 상태 : 생성, 준비, 실행, 대기, 중단 상태표시
      • 프로그램 카운터 : 프로그램 실행을 위한 다음 명령 주소 표시
      • 레지스터 저장 영역 : 누산기, 인덱스 레지스터, 범용 레지스터
      • 프로세서 스케줄링 정보 : 프로세스의 우선순위
      • 계정 정보
      • 입출력 상태 정보
      • 메모리 관리 정보
    • 프로세스 교환
      • 프로세스의 교환은 인터럽트와 트랩, 시스템호출로 나타냄

 


3주차 1강

 

프로세스 관리-1

  • 프로세스 구조
    • 프로세스는 부모자식 관계를 유지하며 계층적으로 생성
    • 유닉스 시스템의 일반적인 프로세스 계층 구조
      • 처음 부팅시 식별자가 0인 첫번째 프로세스 Swapper 생성
  • 프로세스 생성
    • 프로세스는 운영체제 또는 다른 사용자의 응용프로그램 요청에 의해 생성
      • 운영체제가 새로운 프로세스를 생성 추가 하려면 프로세스 관리를 위한 제어 블록을 만든후 주소공간 할당
    • 프로세스 생성 과정
      • 1단계 : 새로운 프로세스에 프로세스 식별자 할당
      • 2단계 : 주소공간, 프로세스 제어블록공간 할당
      • 3단계 : 프로세스 제어 블록 초기화
        • 상태정보/프로그램카운터/스택 포인터 초기화, 자원요청, 우선순위 등
      • 4단계 : 링크 (해당 큐에 삽입)
    • 프로세스가 작업을 위해 자원 필요
      • 자식 프로세스 생성시 필요한 자원을 직접 또는 부모 프로세스의 자원 일부 사용
      • 부모 프로세스는 자식 프로세스에 자원을 나누거나 자원 공유 가능
        • 자원 일부만 사용하도록 제한하면 시스템 부담 방지
    • 새로운 프로세스 생성시 실행과 관련 두가지 경우 가능
      • 부모 프로세스와 자식 프로세스가 동시 실행됨
      • 부모 프로세스는 자식 프로세스들이 모두 종료될 때까지 기다림
    • 새로운 프로세스의 주소 공간은 다음 두가지 경우 가능
      • 자식 프로세스가 부모 프로세스의 주소 공간을 복사
      • 자식 프로세스가 별도의 프로그램 적제
  • 프로세스 종료
    • 프로세스가 명령 실행후 종료되고 운영체제에 프로세스 삭제 요청
      • 일괄 처리 환경 : 작업 종료를 의미하는 신호로 인터럽트 발생 또는 시스템 호출로 중지 명령 전달, 프로세스 완료
      • 대화형 환경 : 사용자가 로그오프 하거나 터미널을 닫을 때 오류에 의해 종료
    • abort 시스템 호출을 이용한 프로세스 종료
      • 종료되는 프로세스를 생성한 부모 프로세스만 호출 가능
      • 부모 프로세스가 자식 프로세스의 생존권을 가져 다른 프로세스는 임의로 작업 중단 시킬수 없음
      • 자식 프로세스 종료시 자식 프로세서의 신원이 부모 프로세스로 전달
    • 부모 프로세스는 아래의 이유로 자식 프로세스 종료가능
      • 자식 프로세스가 할당자원을 초과하여 자원을 사용할때
      • 자식 프로세스에 할당된 작업이 더 이상 없을때
    • 연속 종료
      • 시스템이 부모 프로세스 종료시 자식 프로세스의 존재를 허용하지 않아 종료시키는 현상, 운영체제가 수행
    • 프로세스를 종료하는 경우와 예
      • 정상종료
      • 시간초과
      • 실패
      • 산술오류, 보호오류, 데이터오류
      • 메모리 부족, 접근위반
    • 프로세스를 파괴하는 것
      • 제거시 프로세스에 속한 자원을 시스템에 돌려주고 해당 프로세스는 테이블에서 사라지며, 제어블록 회수
      • 프로그램은 디스크에 저장됨

프로세스 관리-2

  • 프로세스 중단과 재시작
    • 프로세스 중단(일시 정지)
      • 프로세서의 동작시간과 입출력 동작 시간차이로 시스템활동시간이 유휴상태로 되는것을 해결 가능
      • 장시간 중단되는 경우 할당된 자원을 다시 풀어주어야한다
      • 다중 프로그래밍에서 중단은 자원부족(대기) 상태를 의미함
    • 운영체제는 두가지 방법으로 프로세스 실행가능
      • 새로운 프로세스를 생성하여 실행
      • 이미 실행 중인 프로세스를 중단 시켰다가 다시 실행
    • 프로세스 재시작
      • 중단원인이 제거되어 프로세스가 다시 실행되는것
      • 중단되었던 프로세스는 중단 되었던 지점부터 다시시작
  • 프로세스 우선 순위 변경
    • 프로세스 제어블록의 우선 순위값 변경 가능
      • 준비 리스트의 프로세스는 우선순위 구분
        • 우선순위가 낮은 프로세스 : 시간 할당량 크게 제공
        • 우선순위가 높은 프로세스 : 시간 할당량 낮게 제공
      • 입출력 프로세스
        • 높은 우선 순위 : 속도가 느리면서 빠른 응답을 요구하는 단말기
        • 낮은 우선 순위 : 속도가 빠른 디스크 입출력 프로세스
      • 프로세스 스케줄러는 준비 리스트의 우선 순위를 이용해 프로세스를 처리
      • 할당 시간을 초과할 경우 프로세스 실행 상태에서 준비 상태로 변경
  • 문맥교환 (Context Switching)
    • 프로세스 교환
      • 실행중인 프로세스가 인터럽트되면 운영체제가 다른 프로세스를 실행상태로 변경, 제어를 넘겨주는 과정
        • 트랩은 시스템이 치명적오류인지 판단, 치명적 오류일 경우 프로세스를 종료하면서 프로세스 교환 발생
    • 문맥 교환
      • 프로세스를 다른 프로세스로 교환하기 위해 이전 프로세스 상태레지스터 내용보관, 다른 프로세스를 적재과정
        • 준비>실행, 실행>준비, 실행>대기 상태로 변할때 발생
        • 오버헤드가 발생하며 오버헤드는 메모리속도, 레지스터수 따라 시스템마다 다름
      • 인터럽트
        • 현재 실행되는 프로세스와 별도로 외부에서 발생되는 여러 종류의 이벤트에 의해 발생
        • 인터럽트 예
          • 입출력 인터럽트
          • 클록 인터럽트
      • 트랩
        • 부적절한 파일접근 또는 현재 실행중인 프로세스에 의해 발생되는 오류나 예외 상황으로 발생

 


3주차 2강

 

스레드

  • 스레드 개요
    • 프로세스에서 실행 제어만 분리한 실행 단위
      • 경량 프로세스 라고도 부름
      • 프로세서를 사용하는 기본단위, 명령어를 독립적으로 실행할수있는 하나의 제어흐름
      • 작업 : 스레드의 그룹 환경
        • 같은 그룹의 스레드와 코드, 주소공간, 운영체제의 자원 공유
    • 프로세스는 스레드를 하나 이상 가짐
      • 스레드 실행시의 상태(실행, 준비 등)
      • 실행 스택
      • 지역변수와 스레드의 특정 데이터를 저장하기 위한 스레드별 정적 저장소
      • 프로세스의 다른 스레드가 공유하는 메모리, 자원 접근, 스레드 실행환경정보 (문맥정보)
    • 스레드의 장점
      • 스레드들은 공통 목적 달성을 위해 병렬로 수행
        • 자원공유하며 한 프로세스에서 동시 작업가능
      • 시스템 성능과 효율 향상
        • 하나의 프로세스가 다른 프로세서에서 프로그램의 다른 부분을 동시에 실행가능
        • 응용 프로그램 하나가 비슷한 작업 여러개 수행
      • 사용자에 대한 응답성 증가
      • 프로세스의 자원과 메모리 공유가능
      • 경제성
      • 다중 프로세서 구조 활용가능
    • 운영체제는 단일 프로세스에서 단일 스레드 실행과 다중 스레드 실행 지원
      • 단일 스레드 프로세스
        • 전통적인 방식
      • 다중 스레드 프로세스
        • 프로세스 하나가 여러 스레드 실행
    • 다중 스레드의 특징
      • 각 스레드를 별도의 프로세서에서 실행하는 측면 다중 프로세싱과 같은 의미
      • 자원 생성과 관리의 중복성을 최소화하여 실행능력향상
      • 각 스레드는 커널 개입없이 서로 통신 가능 독립적 실행
      • 서버에서 많은 요청을 효과적으로 처리
      • 프로세스를 새로 생성하는 것보다 기존 프로세스에서 스레드를 생성하는것이 빠름
      • 프로세스의 상대적인 무게를 줄여 효율 극대화
    • 단일 스레드와 다중 스레드 모델
      • 단일 스레드 프로세스 모델
        • 프로세스를 하나의 스레드, 스레드가 가진 레지스터와 스택으로 표현
      • 다중 스레드 프로세스 모델
        • 프로세스를 각각의 스레드와 고유의 레지스터, 스택으로 표현, 프로세스 주소 영역을 모든 스레드가 공유
    • 스레드 용법
      • 단일 사용자 다중 처리 시스템 환경
        • 시스템 호출이 아닌 사용자 라이브러리 수준에서 스레드 개념을 제공, 빠른 속도
        • 프로그램에 비동기적 요소를 구현
      • 공유 메모리 형태의 다중 프로세서 시스템 환경
        • 프로그램 공유 메모리에 저장, 스레드를 프로세서에 할당, 병렬처리하여 성능 향상
      • 스레드 단점
        • 사용자 수준 스레드는 커널 자체가 스레드 하나로 구성, 시스템 호출 실행시 스레드가 포함된 전체작업이 호출결과가 돌아올때까지 대기
    • 스레드의 상태 변화
      • 스레드의 특징
        • 준비,실행,대기,종료 상태로 구분
        • 한 프로세스에 있는 스레드는 순차적으로 실행, 자신의 정보를 위한 프로그램카운터와 스택을 가짐
        • 스레드 생성시 운영체제는 부모 프로세스와 공유할 자원을 초기화 하지않음
        • 하나의 스레드가 대기일대 다른 스레드 실행가능
        • 서로 독립적이지 않다
        • 보호문제
          • 프로세서는 다수의 사용자에게서 발생, 경쟁적인 자원 요구와 서로 다른 관계 유지
          • 스레드는 한명의 사용자가 여러 스레드를 가진 작업 하나를 소유
      • 스레드의 상태
        • 대기
          • 스레드가 이벤트를 기다릴때, 입출력 작업이 완료될때까지 대기상태
          • 자신의 정보(프로그램카운터, 스택포인터)를 실행 스택에 저장
        • 준비
          • 스레드가 프로세서에 의해 실행될수있는 상태
          • 스레드를 대기시킨 이벤트 발생시 준비 리스트에 삽입
        • 실행
          • 스레드가 프로세서를 점유하여 실행중인 활성화 상태
        • 종료
          • 스레드가 작업을 종료하면 자원을 해제, 레지스터 문맥과 스택할당 제거
    • 스레드 구현
      • 사용자 수준 스레드
        • 커널 스레드를 지원하지 않는 운영체제에서 사용
      • 스레드 라이브러리
        • 스레드 생성, 종료, 문맥 교환을 위한 코드, 동기화, 메모리 할당 정보들을 포함, 프로시저 호출로 수행
      • 사용자 수준 스레드 장점
        • 커널 도움 없이 실행
      • 여러 수준에서 스레드 구현 가능
        • 운영체제에 따라 다르며 일반적으로 사용자 수준과 커널 수준 혼합한 방식중 하나를 사용
      • 사용자 수준 스레드 이용시 장점
        • 높은 이식성
        • 오버헤드 감소
        • 스케줄링의 유연성
      • 사용자 수준 스레드 이용시 단점
        • 시스템의 동시성 지원 불가
        • 시스템 규모 확장 제약
        • 스레드 간 보호 어려움
      • 커널 수준 스레드
        • 사용자 수준 스레드의 한계를 해결하기위해 스레드마다 프로세서를 매핑하는 일대일 스레드 매핑 지원
        • 커널에 의해 생성,삭제, 자신만의 커널 스택을 가짐
        • 사용자 영역에는 스레드 관리를 위한 코드가 없음
      • 커널 지원 부족 문제 해결
        • 커널에 의한 직접적인 스케줄링과 실행으로 사용자 수준 스레드의 문제를 해결하여 시스템 성능 향상
      • 병렬 실행 가능
        • 하나가 시스템 호출시 다른 스레드가 중단되는 다대일 방식의 문제 해결
        • 시스템 규모 확장이 쉬우며 처리량 늘림
      • 커널 모드 전환 오버헤드
        • 커널 스레드 생성으로 오버헤드 증가로 응용 프로그램 성능저하를 막기 위해 스레드 수를 제한해야함
      • 이식성 떨어짐
        • 시스템 변경시 제공된 스레드 API를 사용하여 프로그램 수정
        • 제한적인 자원으로 무한정 생성 할수없음
      • 혼합형 스레드 지원
        • 스레드 생성은 사용자 영역에서 여러개의 사용자 수준 스레드에 여러개의 커널 스레드가 매핑되는 다대다 스레드 모델
        • 사용자 수준 스레드 생성시 커널 수준 스레드 생성, 성능 감소
        • 시스템 호출시 다른 스레드가 중단되는 문제를 해결하기 위한 방법
        • 다대다 모델 구현 운영체제 : 솔라리스

 


4주차 1강

 

병행 프로세스와 상호배제 1

  • 병행 프로세스 개념
    • 프로세스 여러개가 동시에 실행
      • 독립적으로 작업수행, 다른 프로세스 협력
      • 프로세스간 교신 필요
    • 비동기적 병행 프로세스
      • 프로세스 간 교신시 동기화되어야 하는 프로세스
    • 상호작용
      • 제한된 자원을 공유하기 위함, 상호작용하는 프로세스는 순서에 맞게 동기화되어야 함
  • 병행 프로세스의 과제
    • 병행성
      • 다수의 프로세서를 이용하여 작업수행, 다중 프로세싱 시스템, 분산처리환경, 다중 프로그래밍 운영체제에서 매우 중요
    • 다중 프로세싱 시스템
      • 각 프로세서가 갖는 오버헤드를 감소, 프로세서의 유효성 증대
    • 다중 프로세싱 시스템의 구현을 위한 해결문제
      • 공유자원을 상호 배타적으로 사용해야함
        • 프린터, 통신망은 한 순간에 한 프로세스만 사용해야함
      • 병행 프로세서들 사이는 협력 또는 동기화 되어야함
        • 상호 배제도 동기화의 형태임
      • 두 프로세스 사이에 데이터 교환을 위한 통신이 이루어져야함
      • 프로세서는 결정성을 확보해야함
        • 동시에 수행되는 다른 프로세스 실행속도 관계없이 항상 일정한 결과보장
      • 교착상태를 해결하고 병행 프로세스들의 병렬처리 극대화
      • 실행 검증문제
      • 병행 프로세스 수행과정에서 발생한 상호 배제를 보장해야함
        • 프로세스가 실행중일대 다른 프로세스가 그작업에 관련된 작업을 수행할수없음
    • 다중 프로세싱 시스템은 프로세스 동기화 알고리즘 필요
      • 프로세서들이 모든 입출력 장치와 메모리 참조 가능
      •  동시에 동일한 자원에 접근시 충돌 발생하므로 이를 해결
  • 선행 그래프
    • 프로세스는 프로세스 집합과 이들의 선행제약의 두가지 요소로 정의
    • 선행 제약
      • 프로세스가 순서대로 다른생토로 옮겨감
      • 두 프로세스간의 선행 관계가 없으면 독립적이므로 병행 실행가능
    • 선행 그래프
      • 제약을 규칙적(논리적)으로 표현한것
      • 각 문장에 대응된 노드가 비순환 그래프를 이룸
    • 산술 연산 수행 알고리즘
      • 병행 수행을 하기위해 프로세서 안의 기능 단위를 여러개 두거나 프로세서를 여러개 사용해야함
      • 프로세서를 여러개 사용시 여러 문장이 동시에 수행되어 수행시간을 줄일수있음
  • 언어적 표현과 병행 문장
    • 프로그램의 여러 문장의 선행관계 명시를 위해 두가지 언어구조 제시
    • fork 와 join 구조
      • 선행 그래프는 연산 선행제약을 정의하는데 유용하나 2차원이라 프로그래밍 언어에 사용하기 어려움
    • 병행 문장
      • 프로세스 하나가 여러가닥의 병렬프로세스로 퍼졌다가 다시 한가닥으로 뭉쳐지는것을 나타내는 고급언어 구조

상호배제와 동기화 1

  • 상호배제와 동기화
    • 상호배제
      • 특정 공유자원을 한순간에 한 프로세스만 사용, 다른 프로세스는 접근할수없게 하는것
    • 프로세스 간 동기화
      • 공유자원을 동시에 사용하지 못하게 실행을 제어하는 기법
      • 순차적 재사용 가능한 자원을 공유하기 위해 상호작용하는 프로세스 사이에서 나타남
  • 병행 프로세스 간 상호작용
    • 프로세스는 세가지 형태로 상호작용함
      • 프로세스들이 서로 인지하지 못하는 경쟁관계 유지
      • 프로세스들은 입출력버스를 비롯한 개체를 공유하는 단계에서 간접적으로 서로의 관계를 인식함
      • 프로세스들은 서로를 인식하고 프로세스끼리 통신할수있는 기본 함수를 가짐
  • 생산자/소비자 프로세스
    • 생산자/소비자, 판독자/기록자(입력기/출력기) 문제
      • 여러 프로세스가 공통 작업 수행을 위해 서로 협동하고, 병행 처리되는 대표적 예
      • 상호배제와 동기화가 필요하며 세마포어를 이용해 구현
    • 생산자와 소비자 프로세서들을 병행 실행하기 위해 공유버퍼가 필요
      • 생산자의 데이터 생산 속도와 소비자의 데이터 소비속도는 서로 독립적이므로 버퍼가 필요
      • 생산자가 이미 채워진 버퍼에 더 채우거나, 소비자가 빈 버퍼에서 데이터 꺼낼때 문제발생
    • 프로세스 간 통신의 예
      • 생산자/소비자 관계에서 한 프로세스가 정보를 생산하면 다른 프로세스는 그 정보를 소비함
      • 버퍼가 비었거나 꽉 차있을때 버퍼에 접근하는 것을 막기위해 생산자와 소비자가 동기화 되어야함
    • 무한 버퍼 생산자/소비자 문제
      • 버퍼의 크기에 제한을 두지 않으며 항상 버퍼에 빈자리가 존재
    • 유한 버퍼 생산자/소비자 문제
      • 크기가 고정된 버퍼 사용, 버퍼가 비었을시 소비자 대기, 버퍼가 가득차면 생산자 대기
      • 공유 버퍼의 저장소를 두개의 논리적 포인터 in과 out을 사용한 순환 배열로 해결 가능
    • 경쟁 상태
      • 공유 데이터에 최종적으로 남는 데이터 결과를 보장할수없는 상황
      • 여러 프로세스가 공유 데이터를 동시접근시, 공유 데이터 접근 순서에 따라 실행 결과가 달라지는 상황
      • 접근 순서화 필요
      • 방지하기위해 병행 프로세서들은 동기화가 실행되어야함
    • 동기화 실행 방법
      • 임계 영역
        • 공유 변수를 어느 한순간에 한 프로세스만 조작 하도록함
      • 상호 배제
        • counter를 조작하는 부분을 임계영역으로 설정, 상호배제함

 


4주차 2강

 

병행 프로세스와 상호 배제 2

  • 임계 영역 (Critical Section)
    • 둘 이상의 프로세스가 공유할수없는 자원을 임계 자원이라하며, 프로그램에서 이를 이용하는 부분
      • 한 프로세스가 임계영역에 들어가면 다른 모든 프로세스는 임계영역으로 진입 금지
      • 다중 처리 시스템과 단일 처리시스템환경에 적용되는 하나의 실행 단위, 실행 구간을 의미
    • 진입 상호 배제
      • 임계 영역에 들어가기를 원하는 프로세스는 진입 상호배제를 수행해야함
    • 임계 영역을 떠나는 프로세스는 출구 상호배제를 수행함으로써 다른 프로세스가 임계영역에 들어갈수있도록 함
    • 프로세스들이 서로 협력하여 자원을 사용할수있도록 프로토콜을 설계하여 임계영역 문제 해결가능
      • 집입영역(진입코드)
      • 출구영역
      • 잔류영역
    • 임계영역을 해결하기 위해 세가지 요구를 만족해야함
      • 상호 배제
        • 한 프로세스가 임계영역에서 작업중에는 다른 프로세스는 임계영역에서 수행할수없다
      • 진행
        • 임계영역에서 작업중인 프로세스가 없고 다수의 프로세스가 진입시, 선정 알고리즘에 따라 대상 선정
        • 다음 임계영역으로 들어갈 프로세스 선택은 무한정 미룰수없음
      • 제한된 대기
        • 한 프로세스가 임계영역을 요청시 수락되기까지 다른 프로세스 진입할수있는 회수제한
  • 소프트 웨어적인 임계영역 문제해결
    • 단일 프로세서 또는 메모리 공유하는 다중 처리 환경의 포로세서가 존재
    • 알고리즘 1 (상호배제 단계 1 알고리즘)
    • 데커 알고리즘
      • 하드웨어 도움없이 상호배제 문제를 해결
        • 특별한 하드웨어 명령문 필요하지않음
    • 특별한 하드웨어 명령을 사용, 임계영역 문제를 해결가능
      • 기계를 비교하거나 단어 내용을 검사 및 수정 하는 명령을 통해 해결
    • testandset 을 이용한 상호배제 알고리즘
      • testandset(a, b); 는 논리변수 b를 읽어 a에 복사하고 b를 참으로 하는 명령
      • 단일 프로세서 또는 메모리를 공유하는 다중 처리 환경과 관계없이 적용되며, 간단하여 쉽게 적용된다는 장점
      • 임계영역에 진입하려는 프로세스에 바쁜 대기 발생
      • 무한 연기 가능성이 발생할수있지만, 프로세스가 많으면 거의 발생하지 않음
  • 세마포어 (Semaphore)
    • 음이 아닌 정수값을 갖는 플래그 변수
      • 다익스트라가 상호배제의 문제를 극복하기 위해 제안함
      • 세마포어의 유명한 예 '열차의 진행 가능 여부'를 나타내는 차단기
    • 세마포어의 정의
      • 프로세스 동기화 문제해결을 위한 두가지 연산(P,V)
        • P : 네덜란드어 검사(Proberen) 의미, 프로세스 대기시키는 wait 동작, 임계영역 진입하기 위한 연산
        • V : 네덜란드어 증가(Verhogen) 의미, 대기중 프로세스를 깨우는 신호를 보내는 동작, 임계영역 나오기 위한 연산
        • S : 세마포어, P와 V에 의해서만 접근되는 변수
    • 세마포어 사용
      • 세마포어는 프로세스 n개의 임계영역 문제를 다루는데 사용
        • 세마포어 S에 적용된 두연산 P,V 는 동시에 두가지 동작이 실행되는것을 예방하는 상호배제를 의미함
        • n개의 포로세스는 1로 초기화된 공통 세마포어인 mutex를 공유
        • 세마포어는 여러가지 동기화 문제를 다루는데 사용
      • 세마포어의 중요특징은 단위적으로 수행된다는 점
        • 단위적 수행
        • 다중 프로세서인 경우 인터럽트 금지가 허용 불가능
  • 모니터
    • 프로그래밍 언어에서 제공되는 프로그래머 정의 연산자들의 집합으로 구성
      • 프로그램 작성이 어려운 단점 극복
      • 모니터의 형태 표현은 변수 선언으로 구성, 변수 값이 형태를 정의함
    • 모니터의 구조
      • 하나 이상의 프로시저와 초기화 코드, 공유 데이터로 구성된 소프트웨어 모듈로 이루어진 객체
      • 모니터 밖에 있는 프로세스는 모니터에 있는 데이터 접근 불가
      • 모니터 경계에서 한번에 한 프로세스만 진입하도록 제어, 상호 배제 원칙을 지킴
      • 자원 반납시 모니터 진입 루틴 호출
    • 모니터의 조건 변수
      • 임계영역과 유사, 프로세스가 실행되는 동안 상호배제와 동기화를 제공
      • 조건 임계영역으로 확장, 동기화를 위한 부수기법 필요
      • wait 과 siganl 연산만이 호출 가능

정리하기

  • 병행 프로세스
    • 프로세스 여러개가 동시에 실행
    • 독립적으로 수행 가능, 다른 프로세스와 협력
  • 선행 제약
    • 프로세스가 순서대로 다른 상태로 옮겨가는것
    • 선행 그래프는 제약을 형식적으로 표현하는데 사용됨
    • 프로그래머는 순차 프로세스의 개념을 이용, 여러 명령문 사이의 선행관계 기술가능
  • 상호배제
    • 한 프로세서가 작업중일대 나머지 프로세서들이 관련된 작업을 수행할수없게함
    • 협조관계에 있는 순차 프로세스 집합체에서 상호배제는 필수
  • 병행 명령
    • 선행제약을 위해 forkdhk 병행 명령이라는 언어 구조 두개가 제안됨
    • 병행 실행의 개념은 순차 프로세스 개념과 선행그래프 이용, 형식화됨
  • 동기화의 문제점
    • 상이한 동기화 문제점들은 병행 제어 문제들의 실례
    • 새롭게 제안된 거의 모든 동기화 기법들은 검사를 위해 이 문제를 이용
  • 세마포어
    • 상호배제의 해결책의 단점으로 모두 바쁜 대기를 요구함
    • 동기화 문제들을 해결하기위해 사용
  • 임계영역과 모니터
    • 운영체제는 타이밍 오류에 대처할수있는 수단 제공해야함
    • 임계영역은 상호배제와 임의의 동기화 문제들을 안전하고 효과적으로 구현하기위해 사용
    • 모니터는 추상 데이터 형태를 공유하기 위한 동기화 메커니즘 제공

 

 

'과제정리' 카테고리의 다른 글

자료구조 정리  (0) 2020.05.27
인터넷보안 정리  (0) 2020.05.24
멀티미디어개론 정리  (0) 2020.05.21
데이터 통신_4주차 2강  (0) 2020.05.17
데이터 통신_4주차 1강  (0) 2020.05.17
Comments