CS/OS

    [운영체제] 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와 ..

    [운영체제] Ch5. CPU 스케줄링

    [운영체제] Ch5. CPU 스케줄링

    공룡책(운영체제)을 읽고 정리한 글입니다. 실질적으로 운영체제는 프로세스가 아니라 커널 수준 스레드를 스케줄한다. 그러나 '프로세스 스케줄링'과 '스레드 스케줄링' 용어는 상호 교환적으로 사용된다. 일반적인 스케줄링 개념이면 '프로세스 스케줄링'을 사용하고, 스레드에 국한된 개념이면 '스레드 스케줄링' 이라는 용어를 사용할 것이다. CPU 스케줄링 기본 개념 하나의 프로세스가 I/O요청이 완료되기를 기다리고 있다. 만약 프로세스가 I/O응답을 받기 전까지 다른 프로세스를 실행하지 못하고 기다린다면 시간을 매우 비효율적으로 사용하게 된다. 따라서 어느 프로세스가 대기해야 할 경우, 운영체제는 CPU를 회수해 다른 프로세스에게 할당해야 할 것이다. 결국 CPU는 항상 바빠야 한다는게 중요한 원칙이 된다. 그..

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

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

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

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

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

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

    [운영체제] Ch2. 운영체제 구조

    [운영체제] Ch2. 운영체제 구조

    공룡책(운영체제)을 읽고 정리한 글입니다. 운영체제를 이해하는 관점 운영체제가 제공하는 서비스에 초점 운영체제가 사용자와 프로그래머에게 제공하는 인터페이스에 초점 시스템의 구성요소와 그들의 상호 연결에 초점 운영체제 서비스 위 그림은 운영체제의 서비스에 대한 관점에서 본 운영체제의 구성요소들과 그들의 상호관계를 보여준다. 1. 사용자에 도움을 주는 것이 목적인 운영체제의 기능 사용자 인터페이스 말 그대로 사용자가 I/O를 지시하고, 메뉴에서 작업을 선택하고, 화면을 선택할 수 있게 해주는 역할의 인터페이스를 제공한다. PC에서 주로 사용하는 그래픽 사용자 인터페이스(GUI)가 있고, 휴대폰이나 태블릿에서 사용하는 터치 스크린 인터페이스가 있고, 터미널과 같은 명령어 라인 인터페이스(CLI)가 있다. 프로..

    [운영체제] Ch1. 서론

    [운영체제] Ch1. 서론

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

    [OS] Virtual Memory #1

    [OS] Virtual Memory #1

    Virtual Memory 각각 가상화된 OS들이 자신만의 물리 메모리가 있다고 믿게 해주기 위해 메모리 가상화를 사용한다. 메모리 가상화의 목표 투명성 프로세스는 메모리가 가상화 된 사실을 몰라야 한다. 효율성 메모리 공간의 파편화를 최소화 한다. (공간 효율) 하드웨어의 도움을 받아 오버헤드를 줄인다. (시간 효율) 보안 OS와 프로세스를 다른 프로세스로부터 보호해야 한다. 프로세스 각각은 독립적이어야 한다. 오른쪽이 실제 물리 메모리 공간이고 왼쪽이 가상 메모리 공간이다. 하드웨어의 도움을 받아 가상메모리 주소를 실제 물리 메모리 주소로 변환해 사용할 수 있다. 주소 변환 OS는 물리 메모리 공간의 어디가 비어있는지, 어디가 사용중인지를 추적할 수 있어야 한다. 메모리 공간의 주소는 물리 메모리에 ..