CS/운영체제 (25) 썸네일형 리스트형 [ 운영체제 ] 컴파일(Compile)과 링킹(Linking), 런타임(Runtime), 로딩(Loading) 이 글에서는 주소 바인딩(Address Binding)을 이해하기 위해 꼭 알아야 하는 용어들을 설명한다. 원래 주소 바인딩을 바로 다루려고 했으나 정리하다가 용어가 헷갈려서 공부할겸 정리한다. 컴파일, 런타임, 로딩을 정확하게 이해해야 주소 바인딩을 이해할 수 있다. 컴파일이란? 컴파일은 원시 코드를 컴퓨터가 이해할 수 있는 언어로 번역해주는 과정을 말한다. 아래 그림을 보자. 위 그림은 컴파일 과정을 나타낸 그림이다. 우리는 컴퓨터가 0과 1만 이해할 수 있다는 것을 잊으면 안 된다. 우리가 흔히 쓰는 파이썬이나 자바, C++과 같은 고급 프로그래밍 언어는 컴퓨터 입장에서는 외계어다. 따라서 우리가 짠 소스코드를 컴퓨터가 이해할 수 있는 언어로 번역해주는 과정이 필요한데, 이를 '컴파일'이라고 한다... [ 운영체제 ] 메모리 계층 구조 이 글은 '메모리 관리'를 공부하기 전에 숙지하고 있으면 도움이 될만한 내용이다. 워밍업 단계라고 생각하자. 먼저 이 글을 포함해서 '메모리 관리' 파트를 읽을 때 컴퓨터구조 지식이 약간 필요하다. 즉, CPU의 작동 원리를 알고 있으면 학습 효과가 올라간다. 컴퓨터구조도 나중에 정리할 생각이기는 하지만 진짜 너무 깔끔하고 이해하기 쉽게 정리해놓은 영상이 있어서 소개를 먼저 하겠다. 20분 정도 되는 분량이지만 꼭꼭꼭 끝까지 보기를 바란다. [ CPU는 어떻게 작동할까 ] 클릭! 위 영상을 다 봤다는 가정 하에 글을 쓰겠다. 만약에 글을 읽다가 생소한 용어가 있다면 위 영상을 꼭 시청하기를 바란다. 컴퓨터의 부속 장치들은 크게 연산장치와 기억장치로 분류할 수 있다. 연산장치로는 CPU, GPU 등이 있고.. [ 운영체제 ] Banker's Algorithm 데드락 해결 방법 중 회피(Avoidance)를 다루다가 Banker's Algorithm 내용이 길어져서 따로 정리한다. Banker's Algorithm은 자원의 인스턴스 개수가 두 개 이상일 때 사용할 수 있는 회피 방법이다. 이 알고리즘에서 사용하는 자료구조는 아래와 같고, 이는 이미 알고 있다는 가정 하에 시작한다. int n = number of Processes int m = number of Resource Types int Available[m] = 각 Resource Type 별로 이용 가능한 instance 개수 // Available[j] = k, R_j의 인스턴스 개수가 k 개라는 뜻 int Max[n][m] = 각 프로세스의(n) 자원별(m) 최대 요구 인스턴스 수 // Max[.. [ 운영체제 ] 데드락(Deadlock) 해결 방법 데드락은 운영체제 입장에서 정말 큰 문제다. 프로세스가 자원을 얻기 위해 영원히 대기하면서 심각한 자원 낭비가 발생하기 때문이다. 따라서 데드락을 제어하는 것은 중요한 이슈다. 데드락을 해결하는 방법은 크게 세 가지로 나뉜다. 1. 데드락에 빠지는 상황을 피하는 방법 ---- Deadlock Prevention ---- Deadlock Avoidance 2. 데드락에 빠지면 다시 이전 돌아가는 방법 ---- Deadlock Detection ---- Deadlock Recovery 3. 데드락 무시(Ostrich Algorithm) ---- 희박한 교착 상태에 대한 문제를 무시하는 방법 3번이 흥미롭다. 우리가 이렇게 데드락에 대해 열심히 배우지만 사실 대부분의 운영체제가 데드락을 무시하고 있다. 발생 .. [ 운영체제 ] 데드락(Deadlock)의 개념과 발생조건 저번 시간에는 세마포어에 대해 알아봤었다. 세마포어는 Block & Wakeup 구조를 통해 spinlock 문제를 해결했지만 이로 인해 또 다른 문제가 발생한다고 했었다. 그 중 하나가 Deadlock and Starvation 문제다. 데드락은 아래 그림과 같이 서로 다른 두 프로세스가 wait 상태에 있는 자원을 요청하는 경우 발생한다. 만약이 이 문장을 이해했다면 데드락의 개념은 이해한 것이다. 이번 글에서는 데드락이 정확하게 무엇인지, 어떤 상황에서 발생하는지 알아볼 것이다. 데드락(Deadlock)의 개념 - 식사하는 철학자 문제 '식사하는 철학자 문제'는 데드락의 개념을 설명할 때 정말 많이 사용되는 예시다. 아래의 상황을 가정하고 시작한다. 좀 말이 안 되기는 하지만 개념 설명을 위한 가정.. [ 운영체제 ] 동기화 방법3 - Semaphores 세마포어는 Mutex의 spin lock 문제를 해결해주는 동기화 방법이다. 참고로 세마포어는 유명하신 '다익스트라' 님께서 고안해내신 알고리즘이다. 다익스트라 알고리즘의 그 다익스트라 맞다. 정말 대단하신 분인 것 같다. Mutex에서 lock은 boolean 값으로 참 또는 거짓의 값만 가진다. 반면에 세마포어에서는 boolean 대신 integer 값의 변수를 이용한다. 엄밀히 말해서 세마포어는 구조체 형태인데, 구조는 아래와 같다. typedef struct{ int value; // 사용 가능한 자원의 수 struct process *list; // waiting queue }semaphore; 세마포어의 집입 구역과 퇴출 구역은 각각 wait() 함수와 signal() 함수가 담당한다. 세마포.. [ 운영체제 ] 동기화 방법2 - TestAndSet(), Mutex Locks 저번 시간에는 피터슨 방법에 대해 다뤘었다. 피터슨 방법의 단점 및 문제점을 다시 한번 살펴보자. 1. 소프트웨어적 방법 - 속도가 느리다 2. 프로세스가 두 개인 경우에만 적용 가능 3. 자원을 많이 소모한다(Busy Waiting) 4. 현대 컴퓨터에서 정상 작동 하지 않음 이번에 소개하는 방법은 피터슨 방법에서 Busy Waiting을 제외한 나머지 단점들을 보완한 방법이다. 소프트웨어적인 방법으로 경쟁 상태를 해결하는 것은 컴퓨터 구조적으로 문제가 발생할 수 있기 때문에 이번에는 하드웨어적인 방법으로 접근한다. 하드웨어적 방법은 원자적 실행 단위를 보장하므로 코드의 순서가 바뀌거나 하는 일은 없다. Synchronization Hardware: TestAndSet() TestAndSet()은 하드.. [ 운영체제 ] 동기화 방법1 - Peterson's Solution C.S Algorithm의 문제점 임계구역의 일반적인 형태는 아래와 같다. do{ wants[i] = true; // i 프로세스가 공유 자원을 사용하겠다고 선언 while(wants[j]) {;} // j 프로세스가 공유 자원을 사용중이면 진입 불가(진입구역) CRITICAL SECTION wants[i] = false; // i 프로세스가 공유 자원 사용 완료 후 반납(퇴출구역) REMAINDER SECTION } while(TRUE) 기본적인 구조는 잘 갖춰져 있다. 그렇다면 저번 시간에 살펴본 임계구역의 세 가지 요구사항을 만족하는지 살펴보자. 기본적으로 상호배타적 접근은 전제로 깔고 가기 때문에 진행과 한계 대기만 확인하면 된다. 상호 배타도 뒤에서 따져보기 때문에 천천히 보시기를... 이게 무.. 이전 1 2 3 4 다음