목록Computer Science/운영체제 (10)
우보천리 개발
File 파일은 비휘발서 보조 기억장치에 저장이 된다. 파일은 의미있고 관련된 정보를 모은 논리적 단위라고 할 수 있다. 파일의 연산(시스템 콜)에는 Create, Delete, Read, Write, Reposition, Open, Close... 등이 있다. 파일의 속성은 파일 자체의 내용이 아닌 파일을 관리하기 위한 metadata가 들어있다. Directory 파일을 관리하기 위해서 디렉터리를 사용할 수 있다. OS의 파일 시스템은 파일을 디렉토리를 통해 계층적으로 저장하고 있다. 최상위 디렉터리를 루트라고 한다. 디렉터리도 일종의 파일이기 때문에 디렉터리는 디렉터리에 담겨 있는 대상과 관련된 정보를 갖고 있다. File Protection 파일은 여러 사용자 혹은 프로그램이 사용할 수 있기 때문..
가상 메모리 프로그램이 실행 되기 위해서는 프로세스의 전체 주소공간이 메모리에 적재되어있지 않아도 된다. 그렇기 때문에 OS는 프로그램을 실행하기 위해 필요한 부분만을 적재하고 나머지는 Swap Area에서 필요할 때 마다 Swap in 과 Swap out을 반복한다. 그렇기 때문에 프로그램은 물리 메모리의 크기에 제약이 없이 자신만의 가상 메모리를 갖고 0번지 부터 갖을 수 있다. 각 프로세스마다 가상 메모리 공간을 갖고 이 중 일부는 실제로 물리 메모리에 적재가 되어있다. 물리적 메모리는 하드웨어가 관리하지만 가상 메모리는 운영체제가 관여한다. Demand Paging (요구 페이징) 프로그램을 실행할 때 모든 페이지를 메모리에 적재하는 것이 아니라 필요한 부분만을 메모리에 적재하는 기법이다. 그렇기..
불연속할당 기법 연속할당기법과 다르게 불연속할당 기법은 프로세스가 물리 메모리에 연속으로 할당 되어있는게 아닌 여러곳에 분산되어 할당 될 수 있는 기법을 말한다. 불연속 할당기법으로는 메모리를 동일한 크기로 나누어 할당하는 페이징기법, 크기는 다르지만 의미있는 단위로 나누어 할당하는 세그멘테이션 기법이 있다. 연속할당 기법에서는 단편화의 문제점과 메모리 크기보다 큰 프로세스를 실행할 수 없다는 단점이 있었다. 하지만 가상 메모리를 통한 불연속 할당을 통해 실제 메모리보다 큰 프로세스도 실행할 수 있다. Paging(페이징) 페이징은 프로세스를 동일한 크기로 나누어 잘라서 물리 메모리에 할당하는 방식이다. 논리주소 공간은 페이지 단위로, 물리 공간은 페이지와 동일한 크기의 프레임으로 자루고 할당하는 방법이..
Logical and Physical Address 프로그램이 실행되기 위해서는 메모리에 적재되어야 하는데 이때 해당 프로세스만의 독립적인 공간이 생성된다. 이 주소는 논리주소(Logical Address)라고 한다. 각 논리 주소는 0번지 부터 시작하며 프로세스마다 독립적인 공간이 생성된다. 물리적 주소(Physical Address)는 해당 프로세스가 실제로 메모리에 올라가는 주소를 말한다. 하지만 CPU는 물리 주소를 보는 것이 아니라 논리 주소를 보기 떄문에 논리주소와 물리 주소간의 주소의 연결이 필요한데, 이를 주소 바인딩(Address Binding) 이라고 한다. Address Binding 주소 바인딩은 일어나는 시기에 따라 3가지로 분류된다. 1. Compile Time: 프로그램을 컴파..
두개 이상의 프로세스(작업)이 자신의 자원을 놓지 않고 다른 자원을 대기하며 멈춰있는 상황을 교착상태(DeadLock) 이라고 한다. 교착상태 발생조건 1. Mutual Exclusion(상호배제): 매 순간 하나의 프로세스만이 자원을 사용하게 된다면 다른 프로세스는 사용하지 못하여 교착상태 발생 2. Non-preemption(비선점): 프로세스는 다른 자원을 강제로 뺏지 않기 때문에 자원을 얻지 못함 3. Hold and Wait(점유와 대기): 프로세스가 자신의 자원을 놓지 않고 다른 자원을 기다리는 상황 4. Circular Wait(원형대기): 자원을 기다리는 프로세스간의 사이클이 형성(자원 할당그래프가 원의 형태) 하지만 무조건 교착상태는 아님 교착상태 해결 1. Deadlock Prevent..
First Come First Served (FCFS) 비선점형 스케줄링으로 단순한 방식이다. 즉 먼저 도착한 프로세스 순서대로 처리를 한다. 빠른 응답을 요구하는 대화식 시스템에서는 적절하지 못한 스케줄링 방식이다. FCFS에서는 프로세스들의 실행 시간에 따라 평균 반환시간과 대기시간의 차이가 크다. 또한 프로세서를 오래동안 차지하는 프로세스가 먼저 도착하게 되면 뒤에 도착한 프로세스들은 그만큼 기다려야 하는데 이를 Convoy Effect라고 한다. 즉 CPU이용률이 현저하게 낮아진다. FCFS는 구현이 단순하고, 모든 프로세스는 결국 실행이 되기 때문에 공정하다고 할 수 있지만 현대의 시스템에는 맞지 않는 방식이다 Shortest Job First (SJF) SJF는 실행시간이 가장 짧은 프로세스에..

다중 프로그래밍에서는 운영체제는 프로세스들에게 CPU를 할당하거나 회수하면서 프로세서의 이용률과 처리율을 높일 수 있다. 프로세서가 다음에 어떤 프로세스를 실행할 것인지 정해야하는데 그것을 프로세스 스키줄링이라고 한다. 즉, 어떤 프로세스에게 언제 프로세서를 할당할 것인지를 결정해야한다. 일반적으로 프로세스는 I/O Burst와 CPU Burst를 번갈아가며 실행이 된다. 프로세서를 사용하고 있을 때를 CPU Burst, I/O 를 기다리고 있을 때는 I/O Burst라고 한다. 보통 I/O 위주의 프로세스는 CPU Burst가 짧고 반대로 프로세서 중심의 작업(계산)은 CPU Burst가 길다. 그렇기 때문에 I/O가 많은 프로세스는(예를 들어 사용자와 상호작용을 많이 하는 작업)은 CPU를 기다리는 ..
프로세스의 생성 프로세스는 실행 중에 생성 호출을 이용해서 새로운 프로세스를 생성하는데 부모-자식 관계를 유지하며 생성이된다. 생성된 프로세스는 자식 프로세스, 생성한 프로세스는 부모 프로세스이다. 프로세스에서의 생성은 우선 부모 프로세스를 복제한다. fork() 시스템 콜을 통해서 새로운 복제된 프로세스를 생성한다. 복제된 프로세스는 부모 프로세스의 자원을 공유할 수 있고 또는 자신만의 자원을 사용할 수 있다. 부모 프로세스는 자식 프로세스와 동시에 실행 될 수 있고 두번째로는 자식 프로세스의 종료를 기다린 이후 실행 될 수 있다.( wait()) fork 함수를 사용한 이후 exec() 를 실행하면 자식 프로세스를 부모와 다른 별도의 프로그램 프로세스 주소 공간으로 덮어쓴다. 부모 프로세스는 fork..
스레드는 프로세스의 수행 흐름 단위이다. 응용프로그램에는 최소 하나의 프로세스가 있고, 프로세스 안에는 최소 하나의 스레드가 존재한다. 스레드는 프로세스 안에 여러개 존재 할 수 있는데 이는 현대 운영체제에서 지원한다. 다중 스레드는 프로그램 하나를 여러개로 나누어서 실행하기 때문에 다중 처리라고도 한다. 스레드 프로세스는 자원과 제어로 구분할 수 있는데 제어를 분리한 수행단위를 스레드라고 한다. 스레드는 Program Counter, Stack Pointer, Register 등은 개별적으로 갖고 있지만 Code, Data, Heap 영역은 서로 공유한다 멀티 스레드의 장점 사용자 응답성의 증가: 병렬로 수행되기 때문에 프로그램의 일부분이 blocked여도 다른 부분은 수행하면서 사용자 응답성 증가 자..
프로세스(Process) 프로세스를 간단하게 말하자면 실행중인 프로그램이다. 그렇다면 실행중인 프로그램은 무엇인가? 실행중인 프로그램은 디스크에 있는 프로그램이 메모리에 적재가 되어 운영체제의 제어를 받는 상태라고 할 수 있다. 즉 자신만의 주소공간이 생성되어 있다는 뜻이기도 한다. 프로세스의 메모리 구조 스택 힙 데이터 코드 스택 : 지역변수에 사용, 호출한 함수의 반환 값, 반환 주소, 매개변수 등에 사용. 스택은 함수를 호출하면 쌓이고 반환되면서 줄어든다. 스택은 힙 쪽으로 커지고, 스택 포인터와 만나면 메모리가 소진되었다는것. 힙 : 동적으로 메모리 할당할 수 있음. 데이터 : 전역변수, 정적변수 저장하고 프로그램 실행전에 초기화한다. 코드 : 실행 명령을 포함한 프로그램 영역. 프로세스의 상태 ..