OS

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

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

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

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

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

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

    [OS] Virtual Memory #1

    [OS] Virtual Memory #1

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

    [OS] Scheduling #3

    [OS] Scheduling #3

    Scheduling [하루OS] Day-6 Scheduling 어제에 이어서 Scheduling을 좀 더 알아보자 지난번 정리 SJF는 turnaround time을 최적화하는데 유용한 방법이다. RR은 빈번한 context switching을 통해서 response time을 줄이는데 최적화된 방법이.. hyeo-noo.tistory.com Starvation 짧은 수행 시간을 가진 interactive job이 너무 많아진다면 우선순위가 낮은 queue에 배치된 작업은 작업(오래 걸리는 작업)은 수행할 수 없게 된다. Game the scheduler 만약 time slice의 99%를 I/O 작업이 가져가 버린다면 오래걸리는 job들은 오히려 CPU를 거의 사용하지 못하게 될 수도 있다. 프로그램의..

    [OS] Scheduling #2

    [OS] Scheduling #2

    Scheduling 이어서 Scheduling을 좀 더 알아보자 지난번 정리 SJF는 turnaround time을 최적화하는데 유용한 방법이다. RR은 빈번한 context switching을 통해서 response time을 줄이는데 최적화된 방법이다. 사용하는 프로그램마다 제각기 다른 특성을 가지고 있다. 한 번에 끝내는게 효율이 좋거나, 여러 번 나눠서 끝내는 게 좋거나 등등 스케줄러가 프로그램의 특성을 파악하고 그에 따라 더 나은 결정을 할 수 있다면 얼마나 좋을까 MLFQ (Multi-Level Feedback Queue) MLFQ는 여러개의 구별된 queue로 구성되고 각각 다른 우선순위를 가진다. 규칙 1 : A의 우선순위 > B의 우선순위 , A를 실행한다. 규칙 2 : A의 우선순위 =..

    [OS] Scheduling #1

    [OS] Scheduling #1

    Scheduling 지금까지 프로세스와 스레드에 대해 알아보았다. 오늘 내일은 프로세스의 CPU Scheduling에 대해서 알아보자 CPU Scheduling은 크게 2가지로 나뉜다 비선점형 스케줄링(Non-preemptive scheduling)과 선점형 스케줄링(Preemptive scheduling) 비선점형 스케줄링 - CPU가 프로세스를 실행하고 있다면 실행중인 프로세스가 종료되거나 스스로 CPU를 양보하기 전까지 다른 프로세스는 CPU는 사용할 수 없다. - 프로세스들 간의 협력이 중요하다. 선점형 스케줄링 - 사실상 모든 현대 스케줄러가 선점형이다 - 다른 프로세스가 CPU를 사용하고 있어도 강제로 프로세스를 쫓아내고 자신이 CPU를 사용할 수 있다. 스케줄링 알고리즘의 성능을 판단하는 척..

    [OS] Thread #1

    [OS] Thread #1

    Thread 스레드가 뭘까? 왜 있는걸까? 싱글 프로세스는 멀티코어 CPU의 장점을 활용할 수가 없다. 새로운 프로세스를 만드는데는 많은 자원이 필요하다. (시간, 메모리 공간) 프로세스간의 통신 오버헤드가 크게 발생한다. 프로세스간에 context swiching 비용이 크다. 위와 같은 프로세스의 단점을 보완하기 위해서 스레드가 탄생했다. 하나의 프로세스는 여러개의 스레드를 가질 수 있다. 프로세스는 각자의 고유 메모리를 가지고 있기 때문에 프로세스 내부의 스레드들은 하나의 메모리 공간을 공유한다. 그리고 스레드는 각자의 program counter와 stack pointer를 가진다. 위 사진처럼 스레드가 많아질 수록 프로세스의 메모리 공간이 각각의 stack공간으로 채워짐을 알 수 있다. 그리고 ..

    [OS] Process #2

    [OS] Process #2

    Process 프로세스의 상태 전이 표 프로세스는 Ready 상태일때 CPU를 할당받고 Running 상태로 상태전이가 일어난다. 이제 해당 프로세스는 CPU를 이용해 작업을 수행한다. 작업을 마치면 CPU를 반납하고 종료합니다. 만약 작업이 끝나지 않는경우 프로세스는 CPU를 반납하고 ready 상태로 다시 돌아간다. 만약 I/O 작업이 발생한다면 현재 CPU를 사용중인 프로세스는 Block 상태로 전이가 일어난다. I/O작업이 완료되면 해당 프로세스를 ready상태로 전이 시킨다. 작업이 종료되지 않았는데 CPU를 어떻게 반납을 할까? OS는 프로세스의 CPU독점을 방지하기 위해서 하드웨어로 구현된 timer interrupt를 발생시켜 프로세스가 특정 시간 간격동안만 실행할 수 있도록 한다. tim..

    [OS] Process #1

    [OS] Process #1

    Process 프로세스? 실행중인 프로그램을 프로세스 라고 한다. 프로그램은 생명이 없다. 하지만 프로그램이 실행이 되면 프로세스가 되고 프로세스는 프로그램이 종료될 때까지 생명활동을 이어간다. 프로그램이 실행이 되면 아래 그림과 같이 disk의 프로그램 정보가 memory로 load 된다. 프로그램에 속한 모든 정보가 memory로 load되는것은 아니다. OS는 프로그램 실행 도중 필요한 코드를 그때그때 load해서 사용한다. memory 공간은 Code, Data, BSS, Heap, void, Stack 공간으로 구성된다. Code : 프로그램 코드가 올라오는 부분 Data : 초기화된 전역 변수, static 변수 BSS : 초기화되지 않은 전역 변수, static 변수 Heap : malloc..

    SystemSoftware - Exceptional Control Flow #2

    SystemSoftware - Exceptional Control Flow #2

    SystemSoftware - Exceptional Control Flow #1 예외상황(예외처리)에 관해서 알아보자 예외 상황 : Segmentation Fault, Hardware Interrupt 등을 예외 상황이라고 한다 CPU는 명령어 주소에 있는 레지스터에 적혀있는 메모리에 가서 명령을 수행하고, 다 hyeo-noo.tistory.com 이전 포스팅에 이어서 Process와 context switch에 대해서 알아보자 Process : 실행중인 Program에서의 instace (Program : class, Process : object 라고 하기도 한다) Process의 추상화를위한 2개의 중요한 key 가 있다. 1. Logical control flow : 각각의 program이 cpu..