운영체제

    [운영체제] Ch10. 가상 메모리

    [운영체제] Ch10. 가상 메모리

    공룡책(운영체제)을 읽고 정리한 글입니다. 가상 메모리 개념은 어떻게 탄생한 것일까? 현재 실행되고 있는 코드는 반드시 물리 메모리에 존재해야 한다는 사실은 너무나 당연하고 기본적인 조건으로 보인다. 이 요구조건을 가장 쉽게 만족시키는 방법은 전체 프로세스를 메모리에 올리는 것이다. 하지만 이러한 방법은 프로그램의 크기를 물리 메모리의 크기로 제한한다는 점 때문에 마냥 좋지많은 않다. 실제로 많은 경우에 프로그램 전체가 한꺼번에 메모리에 늘 올라와있어야 할 필요는 없다는 사실을 알 수 있다. 프로그램에는 잘 발생하지 않는 오류 상황을 처리하는 코드가 종종 존재한다. 이러한 오류들은 실질적으로 거의 발생하지 않으므로, 이 코드들은 거의 실행되지 않는다. 배열, 리스트, 테이블 등은 필요 이상으로 많은 공간..

    [운영체제] Ch9. 메인 메모리

    [운영체제] Ch9. 메인 메모리

    공룡책(운영체제)을 읽고 정리한 글입니다. 컴퓨터의 CPU는 프로그램 카운터(PC)가 지시하는 대로 메모리로부터 다음 수행할 명령어를 가져오는데 그 명령어는 필요한 경우 추가적인 데이터를 더 가져올 수 있으며 반대로 데이터를 메모리로 내보낼 수도 있다. 전형적인 명령어 실행은 먼저 메모리로부터 한 명령어를 가져오는 데서부터 시작된다. 그런 다음 명령어를 해독하고, 메모리에서 피연산자를 가져와 피연산자에 대해 명령어를 실행한 후에 계산 결과를 메모리에 다시 저장한다. 배경 지식 기본 하드웨어 메인 메모리와 각 처리 코어에 내장된 레지스터들은 CPU가 직접 접근할 수 있는 유일한 범용 저장장치이다. 기계 명령어들은 메모리 주소만을 인수로 취하고, 디스크의 주소를 인수로 취하지 않는다. 따라서 모든 실행되는 ..

    [운영체제] Ch7. 고전적인 동기화 문제들

    [운영체제] Ch7. 고전적인 동기화 문제들

    공룡책(운영체제)을 읽고 정리한 글입니다. 유한 버퍼 문제 소비자와 생산자가 아래 데이터를 공유한다고 가정하자. 길이가 n인 버퍼가 있고, 상호 배제를 제공하는 이진 세마포가 있다. 그리고 현재 버퍼의 빈 공간의 개수와 가득 찬 버퍼의 개수를 기록하는 empty, full 세마포가 있다. 생산자 프로세스의 코드이다. empty 세마포가 0보다 클 때(빈 공간이 있을 때) + mutex가 존재할 때(락을 얻을 수 있을 때) 임계구역에 진입해서 버퍼에 데이터를 입력할 수 있다. 소비자 프로세스의 코드이다. full 세마포가 0보다 클 때(버퍼에 데이터가 있을 때), mutex가 존재할 때(락을 얻을 수 있을 때) 임계구역에 진입해서 버퍼를 소비할 수 있다. Readers - Writers 문제 하나의 DB가..

    [운영체제] Ch6. 동기화 도구들

    [운영체제] Ch6. 동기화 도구들

    공룡책(운영체제)을 읽고 정리한 글입니다. 서론 지금까지 공부하면서 프로세스가 병행하게 또는 병렬로 실행될 수 있다는 것을 알 수 있었다. CPU 스케줄러는 프로세스 사이에서 빠르게 오가며 각 프로세스를 병행 실행시킨다. 이는 현재 프로세스는 다른 프로세스가 스케줄링 되기 전까지만 CPU에서 실행됨을 의미한다. 프로세스의 실행중에 언제든지 인터럽트가 발생할 수 있으며, CPU코어는 언제든지 다른 프로세스의 명령어를 받아들일 수 있다. 이러한 병행, 병렬성 때문에 데이터 무결성에 문제가 생기게 된다. 그래서 이 챕터에서는 어떤 문제가 발생하는지 알아볼 것이다. 간단한 예를 먼저 알아보자 프로세스 사이의 메모리 공유를 1차원 배열의 유한 버퍼를 이용해 구현했던 코드이다. 생산자는 버퍼의 크기가 count와 ..

    [운영체제] Ch4. 스레드와 병행성

    [운영체제] Ch4. 스레드와 병행성

    공룡책(운영체제)을 읽고 정리한 글입니다. 스레드가 필요한 이유 예를 들어, 웹 서버는 클라이언트로부터 웹 페이지나 이미지, 소리 등에 대한 요청을 받는다. 하나의 웹 서버는 여러 개의 클라이언트들의 병행하게 접근할 수 있다. 만약 웹 서버가 단일 스레드 프로세스로 작동한다면, 자신의 단일 프로세스로 한 번에 하나의 클라이언트만 서비스할 수 있게 되어 클라이언트는 자신이 요청이 서비스되기까지 매우 긴 시간을 기다려야 할 것이다. 하지만 멀티 스레드 환경에서는 아래와 같은 구조로 요청-응답구조가 바뀐다. 요청이 들어오면 새로운 프로세스를 생성하지 않고, 요청을 서비스 할 스레드를 생성하고 추가적인 요청을 받기위한 작업을 재개한다. 멀티 스레드 프로세스의 장점 응답성 실시간 애플리케이션을 멀티 스레드화 하면..

    [운영체제] Ch3. 프로세스

    [운영체제] Ch3. 프로세스

    공룡책(운영체제)을 읽고 정리한 글입니다. 프로세스가 무엇인지, 운영체제에서 어떻게 표현되는지, 어떻게 작동하는지에 대해 알아보자 프로세스 개념 1. 프로세스 비공식적으로, 프로세스는 실행 중인 프로그램을 의미한다. 프로세스의 현재 활동 상태는 프로그램 카운터 값과 레지스터의 내용으로 나타낸다. 프로세스의 메모리 배치는 아래 그림과 같다. text : 실행 코드 data : 전역 변수 heap : 런타임중에 동적으로 할당되는 메모리 stack : 지역변수 주의할 점은 스택과 힙 영역이 서로의 방향으로 커지더라도 운영체제는 서로 영역을 침범하지 못하도록 해야한다. 프로그램 자체는 프로세스가 아니다. 프로그램은 명령어 리스트를 내용으로 하는디스크에 저장된 실행파일에 불과하다(수동적). 이와 반대로 프로세스는..

    [운영체제] Ch1. 서론

    [운영체제] Ch1. 서론

    운영체제(공룡책)을 읽고 정리한 글입니다. 운영체제란? 컴퓨터 하드웨어를 관리하는 소프트웨어이다. 또한 응용 프로그램을 위한 기반을 제공하며 컴퓨터 사용자와 컴퓨터 하드웨어 사이에서 중재자 역할을 수행한다. 운영체제는 IOT를 포함하는 자동차와 스마트홈 기기에서 스마트폰, PC, 클라우드 컴퓨팅 환경까지 어느 곳에나 존재한다. 전체 컴퓨터 시스템은 크게 위 사진처럼 분류할 수 있다. 하드웨어, 운영체제, 응용 프로그램 및 사용자. 운영체제의 역할은 사용자와 시스템 두 관점에 따라 나뉠 수 있다. 사용자 관점 사용자는 일반적으로 노트북, 모니터, 키보드, 마우드 등으로 구성된 PC 앞에서 작업한다. 이러한 시스템은 한 사용자가 자원을 독점하도록 설계되었으며, 시스템의 목표는 사용자가 수행하는 작업의 효율을..

    [운영체제] Semaphore

    [운영체제] Semaphore

    운영체제의 병행성 기법 중 하나인 Semaphore에 대해서 알아보자 Semaphore는 정수 값을 가지는 객체라고 생각하면 된다. Sem_wait(), Sem_post()같이 Semaphore의 값을 조절하는 함수를 가지고 있다. 첫 번째 인자는 Semaphore객체, 두 번째 인자는 여러 개의 쓰레드에 의해서 공유되고 있다는 것을 의미, 세 번째 인자는 Semaphore값을 1로 초기화 하겠다는 뜻이다. Semaphore의 2가지 동작에 대해서 알아보자 sem_wait() Semaphore값을 1 감소시킨다. 값이 0 이상이라면 즉시 return 한다. 값이 음수가 된다면 wait상태에 들어가고, sem_post()가 호출될 때까지 wait 한다. 여러 개의 쓰레드가 sem_wait()을 호출한다면 ..

    [운영체제] Locks #3

    [운영체제] Locks #3

    [운영체제] Locks #2 [운영체제] Locks #1 Lock에 대해서 알아보자 Lock이 필요한 이유 2개 이상의 tread가 동시에 공유 자원에 접근할 경우 race condition(병행성 문제)이 발생해서 결과를 예측할 수 없다. 따라서 공유 자원에 hyeo-noo.tistory.com 지금까지의 방법들은 매우 비효율적이다. 왜냐하면 lock을 얻기위해서 spin-wait를 하게되는데, 이러한 방식은 CPU를 불필요하게 계속 소모해서 다른 활동을 하지 못하기 때문이다. 따라서 위 문제를 해결할 수 있는 방법들을 알아보자 Just Yield 가장 간단한 구현 방법이다. 만약 lock이 사용중이라면 깔끔하게 CPU를 반납하고 다음 time-slice에 자신의 차례가 올 때까지 기다리는 방법이다. ..

    [운영체제] Locks #2

    [운영체제] Locks #2

    [운영체제] Locks #1 Lock에 대해서 알아보자 Lock이 필요한 이유 2개 이상의 tread가 동시에 공유 자원에 접근할 경우 race condition(병행성 문제)이 발생해서 결과를 예측할 수 없다. 따라서 공유 자원에 대한 동기화 메커 hyeo-noo.tistory.com 하드웨어적으로 lock 변수를 관리하는 instruction에 대해서 알아보자 CPU에서 제공하는 Atomic Instruction을 알아보자 Test and Set test-and-set을 사용한 Spin lock 사용 예 기존의 TestAndSet을 알기 전에는 flag 값이 0인지 확인하기 + flag 값을 1로 바꾸기와 같은 총 2가지 동작으로 나뉘어서 수행을 했다. 그래서 2가지 동작 사이에 context swi..