CS/운영체제(29)
-
프로세스 수행 상태 변화과정, 중기 스케줄러(=Swapper)
프로세스 수행 상태 변화과정 new 상태 프로세스가 시작되어 그 프로세스를 위한 자료구조는 생성되었지만, 아직 메모리 획득을 승인받지 못한 상태 ready 프로세스가 cpu를 할당받기를 기다리는 상태 프로세스가 cpu를 점유하면 당장 명령을 수행하는 단계로, ready queue에 저장된다. running 프로세스가 cpu를 할당받아 명령을 수행하는 상태 한번에 하나의 프로세스만 실행가능 blocked, sleep, wait cpu를 할당받더라도 명령을 수행할 수 없는 프로세스 상태(ex: i/o작업을 기다리는 등) waiting queue에 저장된다. suspended blocked blocked상태에 있던 프로세스가 중기 스케줄러에 의해 disk로 swap out(메모리를 뺏음)된다. suspende..
2024.01.17 -
PCB(프로세스 제어 블록), multi process?
pcb process가 현재 어떤 상태로 수행되고 있는지에 대한 총체적인 정보를 context라고 하는데, 이러한 context정보는 pcb에 저장한다. pcb는 운영체제가 프로세스를 표현한 자료구조로, pcb에는 프로세스의 중요한 정보가 있기때문에 일반사용자가 접근하지 못하도록 커널 메모리 영역안에 저장이 된다. pcb는 커널의 위치하며, 이 메모리 영역은 보호를 받으면서도 비교적 접근하기 편리하기 때문이다. pcb에 담기는 정보 pid 레지스터 값 레지스터값이 pcb에 담기는 이유 프로세스는 자신의 실행차례가 오면, 이전까지 사용한 레지스터값을 복원하여 다시 실행을 재개하기 때문이다. 즉, 자신의 실행차례가 오면, 이전까지 실행한 것을 재개하기 위해서! 프로세스 상태 실행, 준비, 봉쇄 running..
2024.01.17 -
프로그램, 프로세스, 프로세스 주소공간, 스레드
프로그램 코드를 컴파일한뒤, 하드디스크에 저장한 것 프로세스 실행파일(프로그램)이 RAM메모리에 적재되어 cpu를 할당받아 실행하는 것으로, 즉 실행중인 프로그램을 의미한다. 운영체제로부터 자원을 할당받는 작업의 단위 프로세스 주소공간 code 실행한 프로그램의 코드가 저장되는 영역으로, Read-Only영역으로 되어있다. 컴파일시에 결정된다. data 전역변수, static변수가 저장되는 메모리 영역 컴파일시에 결정된다. 초기화된 데이터는 data영역에 저장이 되고, 초기화되지 않은 데이터는 bss(Block Stated Symbol)영역에 저장이 된다. 실행도중에 변경될 수 있기때문에 Read-Write로 지정되어있다. stack 전역변수, 매개변수가 저장되는 메모리 영역 높은 주소 -> 낮은 주소로..
2024.01.17 -
좀비프로세스와 고아프로세스
좀비프로세스와 고아프로세스 좀비 프로세스(자식이 먼저 종료 + 부모가 wait()호출 X) 자식 프로세스가 부모프로세스보다 먼저 종료 + 부모프로세스가 아직 wait()를 호출하지 않은 자식프로세스의 상태 자식 프로세스가 종료되어도 사용하던 리소스를 운영체제에게 반환하지 못하기때문에 완전히 제거되지 못한다. 이러한 경우에 대비하여, 커널은 자식프로세스의 최소한의 정보(자식프로세스의 PID, 프로세스의 종료 상태 등)을 가지게 된다. 이후, 부모프로세스가 wait() 시스템콜을 호출하여 종료상태를 회수하게 되면, 좀비프로세스가 정상적으로 제거된다. 고아 프로세스(부모가 먼저 종료) 부모 프로세스가 자식 프로세스보다 먼저 종료하게 되면, 이때, 자식프로세스의 상태를 고아프로세스라고 한다. 자식프로세스의 부모..
2024.01.15 -
프로세스 관리
프로세스 관리 운영체제가 프로세스를 전부 생성하는 것이 아니라! 시스템이 부팅된 후 최초의 프로세스만 직접 생성하고 그 다음부터는 이미 존재하는 프로세스가 다른 프로세스를 복제-생성하게 된다. 이때 프로세스를 생성한 프로세스를 부모프로세스, 부모프로세스에 의해 생성된 프로세스는 자식 프로세스라고 한다. 결과적으로 프로세스는 트리를 형성한다. 현실세계와 다르게 자식프로세스가 먼저 죽고, 부모프로세스는 그 이후에 죽는 구조이다. 프로세스 생성과 종료 부모프로세스는 fork() 시스템콜을 통해 자식프로세스를 생성한다. fork() 시스템 콜 : fork() 시스템 콜을 통해 생성된 자식 프로세스는 부모프로세스를 복제하기때문에 부모와 동일한 형태를 가진다. (단, PID값은 서로 다름!) 이후, 자식프로세스가 ..
2024.01.15 -
동기식 I/O와 비동기식 I/O의 공통점과 차이점
동기식 I/O (동시성 문제가 발생할 수 있다.) 프로그램이 I/O요청을 했을 때, 입출력을 요청한 프로세스는 해당 I/O작업이 완료되어야 다음 작업을 할 수 있는 방식이다. 주로 읽기 작업에 사용되는데, 일반적으로 디스크, 키보드와 같은 I/O 하드웨어들이 속도가 느리므로 CPU는 입출력 작업을 기다려야한다. 따라서, 일반적으로 입출력 수행 중에 CPU를 다른 프로그램에 할당해 CPU가 계속 쉬지 않고 일을 할 수 있도록 관리한다. 이렇게 CPU를 다른 프로그램에 할당하여 CPU를 쉬지 않게 할때, 동시성(synchronization) 문제가 발생할 수 있다. 예를 들어, 프로그램A가 원래 1이었던 파일의 내용을 3으로 수정하는 I/O요청을 하고 이를 수행하는 동안 프로그램 B에게 CPU를 할당했다고 ..
2024.01.11