2015/07/16 245

25_메인 메모리(Main Memory)

25_메인 메모리(Main Memory) CPU는 PC(Program Counter)가 지시 하는대로 메인 메모리로부터 다음 수행할 명령어를 가져오는데 그 명령어는 필요한 경우 추가적인 자료를 더 가져올 수 있으며 반대로 자료를 메모리로 내보낼 수도 있다. 메인 메모리와 CPU에 내장되어 있는 레지스터들은 CPU가 직접 접근할 수 있는 유일한 저장 장치이다. 모든 실행되는 명령어와 자료들은 CPU가 직접 접근할 수 있는 메인 메모리와 레지스터에 있어야 한다. 만약 자료가 메모리에 없다면 CPU가 처리하기 전에 메모리로 이동(Load)해야 한다. 레지스터들은 일반적으로 CPU클록(clock)의 1사이트(cycle)내에 접근이 가능하지만 메인 메모리의 경우 많은 CPU 클록 및 사이클이 소요되어 CPU가 필..

24_교착 상태(Deadlock)

24_교착 상태(Deadlock) 다중 프로그래밍 환경에서 여러 프로세스들이 한정된 자원을 사용하려고 서로 경쟁 할 수 있다. 한 프로세스가 자원을 요청 했을 때 그 시각에 그 자원을 사용할 수 없는 상황이 발생할 수 있고 그 때는 프로세스가 대기 상태로 들어 간다. 이처럼 대기중인 프로세스들이(요청된 프로세스가 다른 프로세스에 의해 대기) 다시는 그 상태를 변경 시킬 수 없으며 이러한 상황을 교착 상태라 한다. 교착 상태는 한 시스템 내에서 다음의 조건이 동시에 설립 될 때 발생한다. 상호 배제(Mutual exclusion) : 최소한 하나의 자원이 비공유 모드로 점유되어야 한다. 비공유 모드에서는 한 번에 한 프로세스만이 그 자원을 사용할 수 있다. 다른 프로세스가 그 자원을 요청하면 요청 프로세스..

23_원자적 트랜잭션 (Atomic Transaction) – 직렬화, 락킹 프로토콜, 타임스탬프 프로토콜

23_원자적 트랜잭션 (Atomic Transaction) 직렬가능성(Serializability), 락킹 프로토콜(Locking Protocol), 타임스탬프 기반 프로토콜(Timestamp Base Protocol) 직렬 가능성이란 임계구역 내에서 다수의 트랜잭션들이 동시 활성화 될 경우 각 트랜잭션들은 원자적이기 때문에 여러 트랜잭션들을 병렬로 수행시키면 그 결과는 이 모든 트랜잭션들을 어떤 임의의 순서에 따라 하나씩 차례로 순차적으로 실행되는 것을 말한다. 직렬 가능성으로 트랜잭션이 병렬로 수행되면 원자성이 보장되기는 하지만 비효율이 발생 하므로 몇 가지 동시성 제어 알고리즘(concurrency-control algorithm)이 직렬성을 유지하면서 트랜잭션 수행을 중첩 시킬 수 있다. [직렬 ..

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..