반응형

**극꼼이네 GGTales** 307

[운영체제(OS)] 프로그램의 컴파일 과정

메모리 관리를 본격적으로 배우기 앞서, 프로그램의 빌드(컴파일) 과정에 대해 알아보겠습니다. 컴파일 과정은 작게 Compiling, Linking과정으로 나뉩니다. - Source Code Compiling : 소스코드는 개발자가 이해하기 쉬운 언어이지 컴퓨터가 이해할 수 있는 언어가 아닙니다. Compiler는 이 코드를 Assembly 언어로 번역해주고, Assembler는 Assembly언어를 컴퓨터가 이해할 수 있도록 Low Level의 언어(이진수 파일)로 변환하는 과정을 거칩니다. 이 과정을 통틀어서 Compiling이라 합니다. - Object Code를 Executable 파일로 Linking : 이렇게 만들어진 오브젝트 코드를 Linker가 Linking해줍니다. Linker는 여러 소스..

[운영체제(OS)] 9-1. Memory-Management 메모리 시스템, 주소의 할당(Address Binding)

운영체제가 하는 일은 컴퓨터 하드웨어의 자원을 관리하는 일입니다. 컴퓨터 하드웨어에는 대표적으로 CPU, Memory, I/O가 있는데요, 그래서 운영체제가 하는 일은 CPU 관리, 메모리 관리, I/O 관리라고 볼 수 있겠습니다. 운영체제의 목적은 프로그래머가 메모리에 대해 잘 몰라도 하드웨어의 자원을 잘, 효율적으로 사용하게 하는 것입니다. 성능을 향상시키기 위해서는 여러 프로세스들이 주 메모리(Main Memory)를 공유해야 합니다. * 메인 메모리 : CPU가 직접 접근할 수 있는 메모리. CPU는 PC가 지시하는 연산을 수행한 후에 메인 메모리에 데이터를 저장하거나 필요한 데이터를 요구합니다. 메모리를 관리하는 방법은 단순 하드웨어 방식에서 페이징(paging), 파편화(segment) 방법까..

[운영체제(OS)] 8-3) 교착상태(Deadlock) 탐지, 회복

앞서서 배운 교착상태 방지, 회피 알고리즘을 사용하지 않을 경우에는 교착상태가 발생할 수 있으므로 탐지, 회복 알고리즘이 필요합니다. 1. 교착상태(Deadlock) 탐지 : 탐지 알고리즘은 교착상태가 얼마나 자주 일어나는지, 교착상태가 발생하면 몇 개의 프로세스가 연루되는지를 고려해야 합니다. 교착상태가 자주 일어난다면 탐지 알고리즘도 자주 돌려야하는데, 시간이 오래 지나면 못 쓰는 리소스가 묶이고 연루되는 스레드의 수가 늘어날 수 있기 때문입니다. 교착상태가 일어나는 시점 = 어떤 스레드의 자원 요청이 만족되지 못하는 시점 입니다. 극단적으로 스레드의 요청이 만족되지 못할 때마다 탐지 알고리즘을 돌리는 방법도 있습니다. 1) 각 Resource type이 한 개씩만 있는 경우 : 대기 그래프(wait..

[운영체제(OS)] 8-2) 교착상태(Deadlock) 예방, 회피

1. 교착상태(Deadlock) 처리 방법 1) 문제를 무시하고 교착상태가 절대 발생하지 않는 척(?)하기 : 교착상태를 해결하는 데 비용이 더 많이 들기 때문에 무시합니다. 교착상태가 지속될 경우 시스템 성능을 저하시킬 수 있기 때문에 수작업으로 다시 시작해야할 필요가 있습니다. 2) 교착상태를 예방, 회피하는 protocol을 사용 - 예방 : 교착상태 발생 조건 4가지 중 적어도 하나 이상 성립하지 않도록 합니다. - 회피 : 프로세스가 사용할 리소스에 대한 부가적인 정보를 얻은 후에 프로세스를 기다려야할지 결정합니다. 3) 교착상태를 허용한 후 회복 : 교착상태가 발생했는지 조사하는 알고리즘, 복구 알고리즘을 사용합니다. 2. 교착상태(Deadlock) 방지 방법 (조건 중 하나만 끊어도 방지 가..

[운영체제(OS)] 8-1) 교착상태(Deadlock)란?

1. 교착상태(Deadlock) : 두 개 이상의 프로세스, 스레드가 서로 자원을 얻지 못해 다음 처리를 못하는 상태, 무한히 자원을 기다리는 상태를 말합니다. 멀티 프로그래밍 환경에서 한정된 자원을 얻기 위해 서로 경쟁하는 상황에서, 한 프로세스가 자원을 요청했을 때 그 자원을 동시에 사용할 수 없는 경우 프로세스는 대기 상태에 들어갑니다. 이 대기상태로 들어간 프로세스들이 실행 상태로 변경될 수 없을 때 교착 상태가 발생합니다. System Model : System은 유한한 수의 리소스로 구성이 되며, 정상적인 작동 모드에서 프로세스는 다음과 같은 순서로만 리소스를 사용할 수 있습니다. 1) 요청(Request) : 프로레스가 리소스를 요청하고, 얻을 때까지 대기합니다. 2) 사용(Use) : 프로..

[운영체제(OS)] 7) 고전적인 동기화 이슈

1. 유한 버퍼 문제(The Bounded-Buffer Problem) : 다른 말로는 생산자-소비자 문제(Producer and Consumer Problem)이라 합니다. 유한한 저장공간으로 n개의 버퍼가 존재하며, 각 버퍼는 한 항목(item)을 저장할 수 있습니다. 생산된 데이터는 버퍼에 일단 저장하고, 생산자는 버퍼가 가득 차면 더 넣을 수 없고, 소비자는 버퍼가 비면 뺄 수 없습니다. (ex) 컴파일러 - 어셈블러, 서버 - 클라이언트 : buffer size == count일 때 무한루프를 돌면서 기다리게 되는데 CPU가 다른 일을 하지 못하게 됩니다(busy wait). 이런 상황을 피해서 성능을 높여주기 위해 세마포어를 사용합니다. 버퍼가 가득 차있다면 생산자쪽에 semaphore가 bl..

[운영체제(OS)] 6-2) Mutex Lock, Semaphores

이전 포스팅에 나왔던 임계구역 요구사항을 충족시키기 위해 하드웨어 명령어로 락을 걸고 푸는 등의 하드웨어 기반의 해결책도 있지만 구현 난이도가 어려워 보편적인 응용 프로그래머가 쓸 수 없는 문제가 있습니다. 따라서 임계구역 문제를 해결하기 위한 소프트웨어 도구가 개발되었고, 이번 포스팅에서는 어떤 것들이 있는지를 알아볼겁니다. : 임계구역을 보호하고, 여러 프로세스가 한꺼번에 경쟁하는 것을 방지합니다. 프로세스는 임계구역에 진입하기 전에 반드시 락을 획득해야 하고, 임계영역 사용 종료 시 락을 해제합니다. 락 사용 가능 여부는 Boolean 변수를 사용합니다. 하지만 spinlock(아래 예시 코드의 while문)이라는 busy waiting이 여전히 존재합니다. : Mutex lock보다 더 정교하게 ..

[운영체제(OS)] 6-1) 프로세스 동기화 - 임계구역(Critical-Section)

* 데이터 정합성 이슈 : 동시에 공유 데이터에 접근하면 데이터 불일치가 발생합니다. 데이터 일관성을 유지하려면 협력 프로세스간의 순차적인 실행을 보장하는 매커니즘이 필요합니다. * 무한 버퍼 : 버퍼의 크기에 실질적인 한계가 없음 * 유한 버퍼 : 버퍼의 크기가 고정되어 있음. 버퍼가 비어있으면 소비자는 대기해야하고, 모든 버퍼가 차있으면 생산자가 대기해야 함. * 경쟁 상황 : 여러 프로세스 중 누가 먼저 공유 데이터에 접근하는지. : 하나의 프로세스가 접근 중일 때 다른 프로세스가 접근할 수 없는 코드 segment. 각 프로세스에는 임계 구역이라고 하는 부분이 존재하며, 일반적으로 entry section ~ critical section ~ exit section, remainder sectio..

[운영체제(OS)] 5-2) 스케줄링 알고리즘

: 선점형(preemptive), 비선점형(non-preemptive) 알고리즘으로 나뉩니다. 비선점형 알고리즘이 컨텍스트 스위칭으로 인한 오버헤드가 적지만, 대기 시간이 길어질 수 있기 때문에 일반적으로는 선점형 알고리즘이 주로 사용됩니다. 1. 선입 선처리 스케줄링(First-come, First-Served. FCFS) : CPU를 먼저 요청하는 프로세스가 먼저 할당받으며, Queue로 관리합니다. 비선점형 스케줄링입니다. * 장점 : 가장 간단한 형태의 스케줄링이어서 코드 작성이 쉽고 이해하기 쉽습니다. * 단점 : 순서에 따라서 대기 시간의 차이가 클 수 있습니다. 모든 다른 프로세스들이 길이가 긴 프로세스가 CPU를 양도해주기를 기다려야 합니다(호위효과(Convoy effect). ready ..

[운영체제(OS)] 5-1) 스케줄링 기본 개념

CPU 스케줄링이 무엇인지 살펴보기에 앞서서 아래 두 가지 정의를 먼저 살펴보겠습니다. * maximize CPU utilization : CPU를 최대한 이용하는 것. 어느 프로세스라도 CPU이용을 하고 있어야 합니다. * CPU - I/O Burst Cycle : 프로세스 실행은 CPU 실행 및 입출력 대기로 구성됩니다. (burst는 계속되는 작업을 의미) 프로세스는 입출력 대기 시간 내내 할당받은 CPU를 가지고 놀고 있게 되는데요, 그래서 이를 좀 더 생산적으로 활용하고자 스케줄링이 생겼습니다. 스케줄러는 입출력 대기 시간 동안 CPU를 다른 프로세스에게 할당해주는 역할을 합니다. 그래프를 살펴보면 짧은 CPU burst가 왼쪽에 많이 분포해있고, 긴 CPU burst가 오른쪽에 적게 분포해있는..

반응형