Computer Science36 [운영체제] Synchonization의 문제점 Deadlock과 Starvation Deadlock 둘 이상의 프로세스가 상대방에 의해 충족시킬 수 있는 event를 무한히 기다리는 현상입니다. 예를 들어, Semaphore S와 Q를 동시에 사용해야하는 프로세스가 두 개가 Pi와 Pj가 있을 때. Pi는 S를 먼저 차지하고, Pj는 Q를 먼저 차지한 상황에서 무한히 누군가가 S/Q를 사용하고 반납하기를 기다릴 수 있습니다. Starvation 프로세스가 suspend된 이후에 이를 빠져나가지 못하는 현상입니다. Bounded-Buffer Problem (Producer-Consumer Problem) 위의 그림처럼, 자원을 생상하는 주체와 소비하는 주체가 나눠져있을 경우, 동시성 문제가 발생할 수 있습니다. 이 문제를 해결하기위해서 세 개의 Sem.. 2023. 2. 13. [운영체제] 여러 프로세스가 공유 데이터에 동시에 접근하면 어떻게 되나? 여러 프로세스가 공유 데이터에 동시에 접근하면 어떻게 되나? 어떤 데이터를 바꾸는 과정은 크게 두 개의 과정으로 나뉘어집니다. 첫 째는 해당 값을 읽어오는 것이고 둘 째는 새로운 값을 할당하는 것입니다. 만약 0이 할당된 D라는 공유 데이터의 값을 1 증가시키는 A프로세스를 실행하는 도중에, CPU를 뺏겨 같은 D의 값을 1 감소시키는 B프로세스에게 넘어가면 어떻게 될까요? B가 D를 읽는 시점에는 0일 것이고, 0에서 1을 뺀 -1을 다시 D에 저장할 것입니다. 이후 A에게 차례가 돌아와 A의 문맥에서는 여전히 D를 0으로 알고 있고, 1을 더한 1을 D에 저장할 것입니다. 이 경우 B는 완전 무시당하게 됩니다. Race Condition 이렇게 여러 프로세스가 동시에 프로세스에 접근하는 상황을 Rac.. 2023. 2. 12. [운영체제] CPU Scheduling CPU Scheduling이란 어떤 프로세스에게 얼마만큼 CPU를 줄지 결정하는 것입니다. 만약 CPU를 엄청 오래 쓰는 프로세스에게 CPU를 주고 다 끝날 때까지 기다린다면, 다른 프로세스들은 사용하기 위해 오래 가디려야하기 때문에 비효율적입니다. 따라서, 적절히 CPU를 할당하고 다시 뺏는 스케줄링이 필요합니다. CPU Scheduler: Ready 상태의 프로세스 중에서 어떤 프로세스에 CPU를 줄지 결정합니다. Dispatcher: CPU 제어권을 선택된 프로세스에게 넘깁니다. 이 과정을 Context Switch라고 합니다. Preemptive VS Non-Preemptive CPU를 다 쓸 떄까지 기다리는 것을 Non-Preemptive(비선점형), 강제로 뺴앗은 것을 Preemptive(선점.. 2023. 2. 11. [운영체제] 프로세스 관리 프로세스의 라이프 사이클 프로세스 생성 프로세스는 부모 프로세스가 자식 프로세스를 생성하여 트리 구조를 이룹니다. 프로세스의 생성은 오직 운영체제에 의해서만 이뤄집니다. 자식 프로세스는 부모 프로세스의 문맥을 복제해여 사용합니다. 운영체제에 따라 자식 프로세스의 자원을 운영체제로부터 바로 받을 수도 있고, 부모와 공유할 수도 있습니다. 자원을 공유하는 이유는 자원을 효율적으로 활용하기 위함입니다. 자식 프로세스를 생성하면 부모의 자원(코드, 스택, 데이터)를 복사하지 않고, 부모의 주소 공간을 공유합니다. 이후 자식 프로세스가 부모와 다른 자원을 필요하게 되는 시점에서 부모의 자원을 복사하여 독자적으로 사용합니다. 이것이 Copy-On_Write(COW)입니다. 프로세스 종료 프로세스가 마지막 명령을 수.. 2023. 2. 11. [운영체제] 프로세스와 스레드 프로세스란? 프로세스는 실행 중인 프로그램입니다. 어떠한 프로그램을 실행하게 되면 그것이 하나의 프로세스가 되고, 각 프로세스는 Memory에 독자적인 주소공간을 할당 받습니다. 프로세스 문맥(Context) 각 프로세스들은 시분할 방식으로 CPU를 사용합니다. 즉, 아주 짧은 시간 동안 번갈아가면서 사용합니다. 만약, 한 프로세스가 CPU를 반납했다가 다시 자신의 차례가 왔을 때, 이 프로세스는 지난번 턴에 어디까지 실행시켰는지 어떻게 알 수 있을까요? 이렇게 프로세스가 실행된 마지막 순간을 기록한 것이 문맥(Context)입니다. 이 문맥에는 PC(Program Counter)와 각족 register, 프로세스의 주소공간(code/data/stack), 그리고 해당 프로세스에 대한 커널 정보(PCB와.. 2023. 2. 10. [운영체제] 프로그램 실행 원리 입출력(I/O) 모든 입출력은 운영체제을 통해서 실행할 수 있습니다. 그래서 다른 프로세스들이 입출력을 하기위해서는 운영체제에게 요청을 해야합니다. 이 요청을 '시스템콜'이라고 합니다. 프로세스가 CPU에 인터럽트를 걸게되고, CPU 제어권이 운영체제에 넘어가고 mode bit이 0으로 바뀝니다. OS는 device controller에게 IO 요청을합니다. 동기 vs 비동기 입출력을 진행하는 방식은 '동기'와 '비동기'로 나눌 수 있습니다. '동기'란 어떤 일을 요청하고 그것의 결과를 확인해야 이어서 작업을 수행하는 것을 말하고, 반대로 '비동기'란 어떤 일을 요청해놓고 언젠가는 결과가 나올 것이라는 것만 기대하며 작업을 이어나가는 것입니다. 입출력에도 이 두가지 방법으로 입출력 방식을 구현할 수 있는.. 2023. 2. 2. [운영체제] 컴퓨터 시스템의 구조 CPU는 직장인, 프로세스들은 업무, 운영체제는 관리자 일하는 사람은 직장인 한 명 뿐이고, 해야할 일은 산더미이기 때문에, 운영체제가 직장인의 스케줄을 효율적으로 짜서 부려먹습니다. 이렇게 부려먹기 위한 구조 및 구성 요소들을 정리해보겠습니다. CPU cpu는 매 클럭마다 메모리에서 Instruction이라 불리는 기계어로 이뤄진 최소 작업단위를 가지고와서 실행합니다. 이때 CPU 안의 PC(ProgramCounter)라고 불리는 레지스트리에 어느 인스트럭션까지 읽었는지를 기록하고 있습니다. Mode bit CPU에는 현재 실행 중인 작업이 사용자 프로그램(프로세스)인지, 운영체제 코드인지를 나타내는 Mode bit이 있습니다. 이것이 0이면 모니터모드(= 커널 모드, 시스템 모드)이고, 1이면 사용자.. 2023. 1. 31. [운영체제] 컴퓨터 세계의 리더, OS 들어가며 CS 지식을 쌓기 위해서 KOPW(Korea OpenCourseWare)를 통해 이화여대의 반효경 교수님의 운영체제 강의를 듣기 시작하여, 강의를 듣고 느낀점을 조금씩 정리해보려고합니다. 오늘은 꼭 OS가 컴퓨터 세계의 불균형을 해결하는 리더 같어서 이에 대해 간략히 정리해봤습니다. OS는 누구인가? 들어가기에 앞서 기본적으로 운영체제는 소프트웨어와 하드웨어 사이에 위치하여, 둘 간의 효율적인 협력을 돕는일을 합니다. 간략하게는 아래와 같습니다. 하드웨어를 효율적으로 관리 프로세서, 기억장치, 입출력 장치(하드웨어 자원)등의 효율적 관리 어느 정도는 형평성 있는 자원 분배 시스템을 사용자가 편리하게 사용할 수 있게 한다. 운영체제는 사용자/프로그램들이 마치 자신들만이 컴퓨터를 사용하는 것처럼 느.. 2023. 1. 28. [알고리즘] 비트마스킹 비트마스킹이란? 비트 즉, 2진수를 가지고 자료구조를 표현해서 더 빠르고 효율적으로 연산을 수행할 수 있습니다. 특히 집합 표현을 간결하고 빠르게 할 수 있습니다. 예를 들어 1101 이라는 이진수가 있다면, 각 자리수가 1이라면 그 자리수에 해당하는 것이 존재하는 것이고, 0이면 존재하지 않는다는 식입니다. 이것을 가지고 여러 연산을 수행할 수 있습니다. 비트 연산 우선 기본적인 비트 연산을 자바 기준으로 살펴보겠습니다. 모든 연산은 이진수의 각자리를 비교합니다. 연산자 뜻 & AND (둘다 1이면 1, 아니면 0) | OR (둘 중에 하나 이상이 1이면 1, 둘 다 0이면 0) ^ XOR (둘 이 서로 다르면 1, 같으면 0) ~ 1항 연산자로서 1이면 0으로 0이면 1로 바꿈 A > k 위와 같고,.. 2023. 1. 26. 이전 1 2 3 4 다음