CS(38)
-
좀비프로세스와 고아프로세스
좀비프로세스와 고아프로세스 좀비 프로세스(자식이 먼저 종료 + 부모가 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 -
DMA(Direct Memory Access)
DMA(Direct Memory Access) 원칙적으로 메모리는 cpu에 의해서만 접근할 수 있는 장치이다. 따라서 CPU외의 장치가 메모리에 접근하기 위해서 CPU에게 인터럽트를 발생시켜 CPU가 이를 대행하는 식으로만 가능하다. 하지만, 모든 메모리 접근 연산이 cpu에 의해서만 이루어질 경우, 입출력 장치가 메모리 접근을 원할때마다 인터럽트에 의해 CPU의 업무가 방해를 받게되어 CPU사용의 효율성이 저하되는 문제가 발생한다. 이러한 비효율성을 cpu외에 메모리 접근이 가능한 장치를 하나 더 두는 경우가 많은데, 이와 같은 장치를 DMA(Direct Memory Access)라고 부른다. DMA는 일종의 컨트롤러로, CPU가 입출력 장치들의 메모리 접근 요청에 의해 자주 인터럽트 당하는 것을 막아..
2024.01.11 -
폴링이 뭐야? 인터럽트와 비교되는 개념이라는데?
polling과 interrupt 모두 CPU와 입출력장치의 통신방식 pollinginterrupt polling interrupt 다른 프로세스에게 CPU를 양도하지 않고, 하드웨어 장치가 동작을 완료할때까지 계속 루프를 돌면서 하드웨어 상태를 체크하는 방식을 말한다. CPU가 프로그램을 실행하는 도중에 I/O나 다른 예외 상황발생으로 특별한 처리가 필요할때 CPU에 이를 알려 처리하도록 하는 것을 말한다. 운영체제는 I/O를 요청한 프로세스를 블록시키고 CPU를 다른 프로세스에게 양도한다. 인터럽트를 사용하면, CPU연산과 I/O장치 작업을 중첩시켜서 수행할 수 있게 되어 인터럽트를 통해 I/O처리를 하는 것이, polling보다 CPU의 사용률을 높이는 방법이다. 하지만 인터럽트가 폴링보다 무조건 ..
2024.01.11 -
멀티프로세스와 멀티스레드의 차이
스레드? 프로세스를 구성하는 실행 흐름의 단위 하나의 프로세스는 하나이상의 스레드를 가질 수 있다 단일 스레드 프로세스 : 실행 흐름이 하나인 프로세스 멀티 스레드 프로세스 : 실행 흐름이 여러개인 프로세스 (최근) 프로세스를 이루는 여러 명령어(여러 스레드)를 동시에 실행할 수 있다! 스레드의 구성요소 스레드 ID, 프로그램 카운터를 비롯한 레지스터값, 스택 등 스레드 마다 실행에 필요한 최소한의 정보를 가지고 있다. - 프로세스를 이루는 스레드들은 프로세스의 자원을 공유하며 실행된다. - 코드영역이 스레드마다 있는 것이 아니라, 위 그림과 같이, 하나의 코드영역을 여러개의 스레드가 공유하고 있는 것임! 멀티프로세스와 멀티스레드의 차이를 정확히 이해하자! 멀티 프로세스 : 동일한 작업을 수행하는 단일 ..
2024.01.11