SW Engineering/OS Concept 62

22_원자적 트랜잭션 (Atomic Transaction) – 시스템 모델, 로그 기반 복구, 검사점

22_원자적 트랜잭션 (Atomic Transaction) 시스템 모델(system model), 로그 기반 복구(log based recovery), 검사점(checkpoint) 임계 구역의 상호 배제는 임계 구역이 원자적으로 수행된다는 것을 보장한다. 두 개의 임계 구역이 동시에 병렬로 수행된다고 하더라도 그 결과는 어떤 순서인지는 지정할 수 없지만 마치 두 개를 한번에 하나씩 순차적으로 수행시킨 것과 같게 된다. 가장 대표적인 예는 은행 이체 시스템이다. 자금 이체의 경우 한 통장에서 돈이 출금되어 다른 통장으로 입금된다. 이때 일관성을 위해서는 출금과 입금이 둘 다 발생하던지 둘 다 발생하지 않는 것이다. [시스템 모델(System Model)] 하나의 논리적인 기능을 수행하는 명령(또는 연산)의..

21_프로세스 모니터링

21_프로세스 모니터링 세마포가 프로세스들 간의 동기화를 위해서 편리하고 효과적으로 쓰일 수 있지만 세마포는 잘못하면 발견하기 어려운 타이밍 오류를 야기할 수 있다. 이러한 타이밍 오류들은 특정 실행 순서로 진행되었을 때만 발생하고 이러한 순서가 항상 일어나는 것은 아니기 때문이다. 세마포와 뮤텍스 : http://sqlmvp.kr/140188335482 모든 프로세스들은 mutex라는 세마포 변수를 공유하며 그 초기값은 1이다. 각 프로세스는 임계 구역에 진입하기 전에 wait(mutex)를 실행해야 하며 임계 구역을 나올 때 signal(mutex)를 실행 해야 한다. 이 순서가 제대로 지켜지지 않으면 두 프로세스가 동시에 임계 구역 안에 있을 수 있으며 이러한 문제점들은 하나의 프로세스라도 잘못 행..

20_프로세스 임계 구역

20_프로세스 임계 구역 n 개의 프로세스 {P0, P1, P2, … Pn}이 있는 시스템에서 각 프로세스는 임계 구역(critical section)이라고 부르는 코드 부분을 포함하고 있으며 그 안에서는 다른 프로세스와 공유하는 변수를 변경하거나 테이블을 갱신하거나 파일을 쓰거나 하는 등의 작업을 수행 한다. 임계 구역의 특징은 "한 프로세스가 자신의 임계 구역에서 수행하는 동안에는 다른 프로세스들은 그들의 임계 구역에 들어갈 수 없다" 각 프로세스는 자신의 임계 구역으로 진입하려면 진입 허가를 요청해야 한다. 이러한 요청을 구현하는 코드 부분을 진입 구역(entry section)이라 한다. 임계 구역 뒤에는 퇴출 구역(exit section)이 따라올 수 있다. 코드의 나머지 부분들을 총칭하여 나머..

19_스케줄링 알고리즘 - 우선순위, 라운드 로빈, 다단계 큐, 다단계 피드백큐 스케줄링

19_스케줄링 알고리즘 우선순위, 라운드 로빈, 다단계 큐, 다단계 피드백큐 스케줄링 [우선순위 스케줄링(Priority Scheduling)] 최단 우선 작업 스케줄링(SJF)은 우선 순위 스케줄링 알고리즘의 특별한 경우다. 우선순위가 각 프로세스들에게 연관되어 있으며 CPU는 가장 높은 우선순위를 가진 프로세스에게 할당 된다. 우선 순위가 같은 프로세스들은 선입 선처리(FCFS)순서로 스케줄 된다. SJF 알고리즘은 우선순위(p)가 예상되는 다음 CPU 버스트의 역인 안순한 우선 순위 알고리즘이다. CPU 버스트가 클수록 우선순위가 낮으면 그 역도 성립한다. 아래 표와 그림은 프로세스 순서대로 도착한 순서와 버스트 시간 그리고 프로세스 되는 스케줄링 간트 차트 이다. 프로세스버스트 시간우선순위P110..

18_스케줄링 알고리즘 -선입 선처리 스케줄링과 최단 작업 우선 스케줄링

18_스케줄링 알고리즘 선입 선처리 스케줄링과 최단 작업 우선 스케줄링 CPU 스케줄링은 준비 완료 큐에 있는 어느 프로세스에게 CPU를 할당할 것인지를 결정하는 문제를 다룬다. [선입 선처리 스케줄링(First-Come, First-Served Scheduling)] 선입 선처리(FCFS)스케줄링은 CPU를 먼저 요청하는 프로세스가 CPU를 먼저 할당 받는 방식으로 선입 선처리 정책의 구현은 선입선출(FIFO) 큐로 쉽게 관리 할 수 있다. 요청 및 처리 순서는 다음과 같다 프로세스가 준비 완료 큐에 진입 프로세스의 프로세스 제어블록(PCB)을 큐의 끝에 연결 CPU가 유휴 상태가 되면 준비 완료 큐의 앞 부분에 있는 프로세스에게 할당 실행 상태의 프로세스는 준비 완료 큐에서 제거 선입 선처리 정책은 ..

17_CPU 스케줄링 기본 개념

17_CPU 스케줄링 기본 개념 CPU 스케줄링(scheduling)은 다중 프로그램 운영체제의 기본 이다. 운영체제는 CPU를 프로세스들 간에 교환 함으로써 컴퓨터를 보다 생산적으로 만든다. 스레드를 지원하는 운영체제에서는 프로세스가 아니라 커널 수준의 스레드를 스케줄링 한다. 그러나 프로세스 스케줄링과 스레드 스케줄링 용어는 상호 교환적으로 사용 되며 일반적인 스케줄링을 논의하는 경우에는 프로세스 스케줄링을 사용하고 스레드에 국한된 개념을 가리키는 경우에 스레드 스케줄링이라는 용어를 사용한다. 단일 처리기 시스템에서는 한 순간에 오직 하나의 프로세스만이 실행 될 수 있다. 다중 프로그래밍의 목적은 CPU 이용률을 최대화 하기 위해 항상 실행중인 프로세스를 가지게 하는데 있다. 스케줄링은 운영체제의 기..

16_스레드 이슈(Threading Issues)

16_스레드 이슈(Threading Issues) 다중 스레드 프로그램에서 발생하는 이슈에 대해서 알아 보자. [Fork() 및 Exec() 시스템 호출] 다중 스레드 프로그램에서는 fork()와 exec() 시스템 호출의 의미가 달라질 수 있다. 한 프로그램의 스레드가 fork()를 호출하면 새로운 프로세스는 모든 스레드를 복사 또는 fork()시스템을 호출한 스레드만 복제 한다. Exec() 시스템을 호출하면 exec()의 매개변수로 지정된 프로그램이 모든 스레드를 포함한 전체 프로세스를 대체 시킨다. fork()를 부르자마자 다시 exec()을 부른다면 exec()에서 지정한 프로그램이 곧 모든 것을 다시 대체할 것이기 때문에 모든 스레드를 복제해서 만들어주는 것은 불필요하다. Fork() 후 ex..

15_스레드 라이브러리

15_스레드 라이브러리 스레드 라이브러리(thread library)는 프로그래머에게 스레드를 생성하고 관리하기 위한 API를 제공한다. 스레드 라이브러리를 구현하는데는 두 가지 방법이 있다. 커널의 지원 없이 완전히 사용자 공간에만 라이브러리를 제공하는 것. 라이브러리를 위한 모든 코드와 자료구조는 사용자 공간에 존재한다. 라이브러리의 함수를 호출하는 것은 시스템 호출이 아닌 사용자 공간의 지역 함수를 호출하게 된다. 운영체제에 의해 지원되는 커널 수준의 라이브러리를 구현. 라이브러리를 위한 코드와 자료구조는 커널 공간에 존재한다. 라이브러리 API를 호출하는 것은 커널 시스템 호출을 사용한다. [Pthread] Pthread는 POSIX(IEEE 10031.1c)가 스레드 생성과 동기화를 위한 제정한..

14_스레드 개념과 다중 스레드

14_스레드 개념과 다중 스레드 스레드(thread)는 CPU 이용의 기본 단위다. 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 스택 으로 구성 된다. 스레드는 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 열린 파일이나 신호와 같은 운영체제 자원들을 공유 한다. 프로세스에 하나의 제어 모델이 있으면 단일 스레드 이며, 프로세스가 다수의 제어 스레드를 가진다면 다중 스레드 모델이다. [다중 스레드의 장점] 다중 스레드 프로그래밍을 장점을 크게 네 가지로 분류하면 다음과 같다. 응답성(Responsivness) : 응용 프로그램의 일부분이 봉쇄 되거나 긴 작업을 수행하는 경우에도 프로그램의 수행이 계속 되는 것을 허용 함으로써 사용자에 대한 응답성을 증가 시킨다. 자원 공유(Reso..

13_클라이언트 서버 환경에서 통신

13_클라이언트 서버 환경에서 통신 클라이언트 서버 환경의 통신에서도 메시지 전달 기법을 이용하여 통신 한다. 통신 방식에서 3가지 유형에 대해서 살펴 보자. [소캣(Socket)] 소켓(socket)은 통신의 극점(EndPoint)를 뜻한다. 두 프로세스가 네트워크 상에서 통신을 하려면 양 프로세스마다 하나씩 총 두 개의 소켓이 필요하다. 클라이언트 프로세스가 연결을 요청하면 호스트 컴퓨터가 포트 번호를 부여한다. 이때 포트 번호는 1024(0~1024는 시스템 예약)보다 큰 임의의 정수가 사용된다. 모든 연결은 유일 해야 한다. 소켓을 이용한 통신은 분산된 프로세스들 간에 널리 사용되고 효율적이기는 하지만 너무 저수준이다. 우선 소켓은 쓰레드들 간에 구조화되지 않은 바이트 스트림만을 통신하도록 하기 ..