목록운영체제 (31)
Shine's dev log
페이징과 페이지 테이블은 현대 운영체제 메모리 관련 컨셉에서 아주 중요한 것이므로 잘 정리해두자! 1. 페이징(Paging) address space를 연속적으로 할당하지 말고, 페이지라는 단위로 쪼개서 사용하는 것이다. 먼저, 프로세스의 메모리를 page 단위로 자르고, 실제 physical 메모리도 page 단위로 쪼갠다. 이 때 쪼개진 physical memory를 page나 page frame이라고 부른다. 그리고 Virtual address의 프레임을 Physical 메모리의 프레임으로 mapping 하는 방법이다. 이렇게 paging으로 메모리를 관리하면, external fragmentation이 발생하지 않는다. 물론 internal fragmentation은 발..
1. 프로세스와 메모리 어떤 프로그램을 실행시키려면, 개발자가 짠 코드가 메인 메모리(RAM)에 올라가야 한다. 그 메모리 속에서 변수도 잡히고, 명령어도 실행된다. 각 프로세스들은 자신만의 개별적이고 독립적인 address space가 필요하다. 만약 32비트 컴퓨터를 사용한다면, 프로세스들은 각각 2^32 = 4 * 2^30 = 4GB의 address space를 사용하고 있는 것이다. 하지만, 메모리 라는 컴퓨터 자원은 굉장히 비싼 자원이기 때문에 효율적으로 관리해야 할 필요가 있다. 그래서 운영체제는 프로세스에게 메모리를 독립적으로 할당해주거나, 캐싱을 지원해주거나, Fragmentation을 지원해주는 등의 서비스를 제공한다. 자세한건 추후에 하나씩 배워보자. 2. 주소..
1. 데드락이란? 위의 그림과 같은 상황에서 교통정리를 한다고 생각해보라. 아무리 생각해봐도 서로 너무나 강력하게 맞물려있어서 해결방법이 도저히 떠오르지 않을거다. 바로 이런 상황이 데드락(deadlock)이라고 하는 것이다. 이번에는 컴퓨터 관점에서 데드락을 생각해보자. 위와 같은 흐름으로 동작하는 프로그램이 있다고 가정해보자. 쓰레드0은 B가 풀릴때까지 A를 잡고있을 것이고, 쓰레드1은 A가 풀릴때까지 B를 잡고있을 것이다. 결국 서로 아무런 진행도 하지 못한 채, 오도가도 못하는 상황에 빠지게 되는데 이것이 바로 데드락이다. 2. 데드락의 발생 그렇다면, 어떤 경우에 데드락이 발생할까? 데드락이 발생가능한 경우는 다음과 같다. 1) Task들이 서로 한..
이번에는 Synchronization을 할 때에 발생할 수 있는 Classical Problem 들을 살펴보자. 대표적인 문제들은 1) Bound Buffer Problem 2) Readers-Writers Problem 3) Dining philosophers Problem 세가지가 있다. 1. Bound Buffer Problem 주로 아래 그림과 같은 Bound Buffer에서 발생하는 문제이다. Producer는 버퍼에 접근해 내용을 채우고, Consumer는 버퍼에 내용을 빼간다. 이 때, in = out이면 Buffer는 비었다고 판단한다. (그래서 총 N-1개의 원소만 사용가능하다. -> 꽉차면 in = out 되므로) 여기서 producer 두놈이 동시에 ..
앞서 살펴본 소프트웨어적 Synchronization인 peterson's 알고리즘 같은경우도 실제 컴퓨터에서는 완벽한 동기화 방법이 아니다. peterson 알고리즘은 atomic하다는 전제로는 잘 돌아가지만, non-atomic할 경우 제대로 돌아가지 않는다. 여기서 non-atomic이란, 같은 메모리에 두개의 값이 경쟁해서 들어가려고할 때 두개의 값 말고 뜬금없는 값이 들어가는 것을 말한다. 예를 들어, a라는 변수에 쓰레드1에서는 1을 넣으려고하고, 쓰레드2에서는 2를 넣으려고 할 때 atomic한 경우 a에 1이나 2가 저장되만, non-atomic한 경우 뜬금없는 4가 저장될 것이다. 그래서 하드웨어적으로 동기화 시키는 방법을 사용해야 한다. 1. Diabling Int..
앞서 살펴봤듯이, 시스템에서는 여러개의 프로세스가 동시에 실행되고있다. 이 때, 각 프로세스의 쓰레드가 동시에 돌게 되는데, 만약 여러 쓰레드가 같은 값에 동시에 접근하면 여러가지 문제들이 발생할 수 있다. 이 문제들과 해결책을 알아보자. 1. 동기화 문제 (Synchronization Problem) 두개 이상의 concurrent 하게 동작하는 쓰레드가 공유된 메모리에 있는 자원을 동시에 접근하면, 누가 먼저 접근하느냐에 따라 값이 매번 달라질 것이다. 즉, 일관성없이 운에 좌지우지되는 문제점을 race condition이라고 한다. 이는 정확한 결과를 필요로 하는 시스템에 매우 치명적이다. 따라서 Synchronization(동기화) 작업을 통해 쓰레드들의 메모리 접근을..