no image
[OS] 가상 메모리
🪐Motivation 기존에는 프로세스가 실행되는 코드의 전체를 메모리에 로드해야 했고, 메모리 용량보다 더 큰 프로그램은 실행시킬 수 없었다. 하지만 실제로는 코드의 일부에서만 대부분의 시간을 사용하고, 프로세스는 특정 순간에는 항상 작은 양의 주소 공간을 사용했기 때문에 이러한 방식은 매우 비효율적이었다. 가상 메모리(Virtual Memory)는 이러한 물리적 메모리 크기의 한계를 극복하기 위해 나온 기술이다. 프로세스를 실행할 때 실행에 필요한 일부만 메모리에 로드하고 나머지는 디스크에 두는 것이다. 이를 통해 프로세스 전체가 물리적 메모리에 있는 것 '처럼' 수행되는, 즉 물리적 메모리가 훨씬 많이 있는 것처럼 보이게 된다. 결과적으로 메모리에 작은 양의 주소 공간만 있으면 충분히 프로세스를 수..
2023.04.21
no image
[OS] 프로세스 동기화 3
🪐 전통적 동기화 예제(Classical Synchronization Problems) ⛅ Producer-Consumer Problem 생산자-소비자 문제는 생산자가 데이터를 생산하면 소비자는 그 데이터를 소비하는 형태의 문제이다. 컴퓨터 환경에서 예를 보면, 컴파일러 -> 어셈블러, 웹 서버 -> 웹 클라이언트 등이 있다. 컴파일러에서 생성한 어셈블리어는 어셈블러에서 이를 소비하여 기계어를 만든다. 생산자-소비자 관계를 간단히 그림으로 나타내면 위와 같다. 이 관계의 대부분은 생산자에서 생산한 데이터 양을 소비자가 한 번에 소비하는 경우는 드물다. 생산한 데이터는 중간의 buffer 라는 저장 공간(메모리 공간)에 저장해두고 소비자는 여기서 필요한 만큼 가져간다. 버퍼의 크기는 현실적으로 유한하다. ..
2023.04.21
no image
[OS] 프로세스 동기화2
🪐프로그램적 해결법의 충족 조건 : Critical-section을 해결하기 위해서 만족해야 하는 조건은 ⛅ Mutual Exclusion (상호배제) : 프로세스가 critical section 부분을 수행 중이면, 다른 모든 프로세스들은 그들의 critical section에 들어가면 안 됨. (배타적으로 접근해야 함) ⛅ Progress (진행) : 아무도 critical section에 있지 않은 상태에서 critical section에 들어가고자 하는 프로세스가 있으면, critical section에 들어가게 해줘야 함 ⛅ Bounded Waiting (유한대기) : 프로세스가 critical section에 들어가려고 요청한 후부터, 그 요청이 허용될 때까지 다른 프로세스들이 critical..
2023.04.21
no image
[OS] 프로세스 동기화
🪐 데이터의 접근 ⛅ 데이터가 저장되어 있는 위치로부터 데이터를 읽어와서 연산한 뒤, 연산한 결과를 이전에 저장되어있던 그 위치에 다시 저장. ⛅ 데이터를 읽기만 하면 문제가 없는데, 데이터를 수정하게 되면 누가 먼저 읽어 갔는지가 중요하게 됨. 🪐 Race Condition (경쟁상태) : 여러 프로세스들이 동시에 공유 데이터를 접근하는 상황. 데이터의 최종 연산 결과는 마지막에 그 데이터를 다룬 프로세스에 따라 달라짐. ⛅ S-box(Memory Address space)를 공유하는 E-box(CPU Process)가 여럿있는 경우 Race condition의 가능성이 있다. ⛅ 한 군데에서 데이터를 가져와 1 증가시키는 도중에, 다른 한 곳에서 또 데이터를 가져가 1 감소시키면, (count--) ..
2023.04.21
no image
[OS] CPU 스케줄링
🪐 CPU-burst Time의 분포 ⛅ 여러 종류의 job(=process)이 섞여 있기 때문에 CPU 스케줄링이 필요하다 - Interactive job에게 적절한 response 제공 요망 - CPU와 I/O 장치 등 시스템 자원을 골고루 효율적으로 사용 - CPU Bound Job이 오랫동안 CPU를 잡게 되면 IO Bound Job(사람과의 interaction 빈번함)이 CPU를 잡지 못하고 사람은 답답함을 느끼게 된다 - CPU Scheduling을 통해 IO Bound Job에 CPU를 우선적으로 할당해주게 된다 🎈 CPU/IO Bursts - CPU Burst : CPU를 실행하는 단계 - IO Burst : IO를 실행하는 단계 어떤 프로그램이든 빈도만 다를 뿐 CPU Burst -> ..
2023.04.21
no image
[OS] 프로세스 관리
🪐 프로세스 생성 ⛅ 부모 프로세스가 자식 프로세스 생성 ⛅ 프로세스의 트리(계층 구조)형성 ⛅ 프로세스는 자원을 필요로 함 - 운영체제로 부터 받는다 - 부모와 공유한다 ⛅ 자원 공유 - 부모와 자식이 모든 자원을 공유하는 모델 - 일부를 공유하는 모델 - 전혀 공유하지 않는 모델 - 일부를 공유하는 모델 ⛅ 수행(Exection) - 부모와 자식은 공존하며 수행되는 모델 - 자식이 종료(terminate) 될 때 까지 부모가 기다리는(wait) 모델 ⛅ 주소 공간(Address sapce) - 자식은 부모의 공간을 복사함(binary and OS data) - 자식은 그 공간에 새로운 프로그램을 올림 ⛅ 유닉스의 예 - fork() 시스템 콜이 새로운 프로세스를 생성 1) 부모를 그대로 복사(OS d..
2023.04.14
no image
[OS] 프로세스2
🪐 Thread ⛅ A Thread (or lightweight process) is a basic unit of CPU utilization ⛅ Thread의 구성 - program counter - register set - stack space ⛅ Thread가 동료 thread와 공유하는 부분(= task) - code section - data section - OS resources ⛅ 전통적인 개념의 heavyweight process는 하나의 thread를 가지고 있는 task로 볼 수 있다. 🪐 Thread - 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked(waiting) 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행(running)되어 빠른 처리를 ..
2023.04.14
no image
[OS] 프로세스1
🪐 프로세스의 개념 ⛅ Process is a program in execution ⛅프로세스의 문맥 - CPU 수행 상태를 나타내는 하드웨어 문맥: Program Coutner, 각종 레지스터 - 프로세스의 주소 공간: code, data, stack - 프로세스 관련 커널 자료 구조: PCB(Process Control Block), Kernel stack 🪐 프로세스 상태(Process State) ⛅ 프로세스 상태가 변경 되며 수행된다 - Running: CPU를 잡고 instruction을 수행 중인 상태 - Ready: CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고) - Blocked(wait, sleep): CPU를 주어도 당장 instruction을 수행할 수 없는 상태 Pr..
2023.04.13
no image
[OS] 운영체제 2강: 시스템 구조 및 프로그램 실행 2
🪐 동기식 입출력과 비동기식 입출력 ⛅ 동기식 입출력 - I/O 요청 후 입출력 작업이 완료 된 후에야 제어가 사용자 프로그램에 넘어감 - 구현 방법1 - I/O가 끝날 때 까지 CPU를 낭비 시킴 - 매 시점 하나의 I/O만 일어날 수 있음 - 구현 방법2 - I/O가 완료 될 때 까지 해당 프로그램에게서 CPU를 빼앗음 - I/O 처리를 기다리는 줄에 그 프로그램을 줄 세움 - 다른 프로그램에게 CPU를 줌 ⛅ 비동기식 입출력 - I/O가 시작된 후 입출력 작업이 끝나기를 기다리지 않고 제어가 사용자 프로그램에 즉시 넘어감 🎉 두 경우 모두 I/O의 완료는 인터럽트로 알려줌 🪐 DMA(Direct Memory Access) ⛅ DMA(Direct Memory Access) - 빠른 입출력 장치를 메모..
2023.04.12