스터디/운영체제 10

[운영체제] Inter Process Communication

Inter-Process Communication(IPC) 프로세스 간 통신이란 프로세스가 서로 데이터를 주고받는 방법, 경로 등을 의미합니다. 커널의 디자인에 따라 마이크로 커널, 나노 커널 등 통신이 많이 일어나는 디자인의 경우 IPC 방식이 성능을 크게 좌지우지할 수 있습니다. Shared memory 운영체제의 도움을 받아 일부 영역의 메모리를 여러 프로세스가 동시에 접근할 수 있도록 권한을 받습니다. 프로세스는 공유 메모리를 읽고 쓰면서 프로세스 간 통신을 하게 됩니다. 같은 메모리를 사용하는 환경에서 작동하므로 메모리에 접근하여 값을 변경하면 그 즉시 변경된 값이 반영되어 다른 프로세스들이 접근 시 변경된 값을 얻을 수 있습니다. 처음 메모리에 여러 프로세스가 접근 권한을 부여하는 작업에서만 ..

[운영체제] 좀비 프로세스, 고아 프로세스

좀비 프로세스 자식 프로세스가 부모 프로세스보다 먼저 죽는 경우 부모 프로세스가 종료 상태를 회수하기 위해 커널이 자식 프로세스의 최소한의 정보(PID, 종료 상태 등, 리눅스의 경우 커널에서 사용하는 구조체)를 남겨둡니다. 부모 프로세스는 wait 함수를 호출하여 이 상태를 회수하면 남은 모든 정보가 제거되어 자식 프로세스는 완전히 소멸하게 됩니다. 위와 같은 진행상황에서 부모 프로세스가 wait 함수를 호출하지 않아 최소한의 정보가 메모리에 남아 있는 경우를 좀비 프로세스라고 합니다. 좀비 프로세스는 최소한의 정보만을 가지고 있어 큰 성능 저하를 야기하지 않지만, 운영체제는 한정된 PID를 가지고 있으므로 좀비 프로세스가 PID를 차지하며 다른 프로세스 실행을 방해하게 됩니다. 따라서 부모 프로세스는..

[운영체제] 프로세스 생성과 소멸

Process Creation 프로세스 생성은 부모 프로세스가 연산을 통해 자식 프로세스를 만들어냅니다. 생성된 자식 프로세스 또한 새로운 자식 프로세스를 만들 수 있으며 이를 구별하기 위해 모든 프로세스는 각자 고유의 PID를 가지게 됩니다. 이렇게 생성된 프로세스 간의 관계는 하나의 큰 트리구조가 됩니다. init 프로세스 : 리눅스, 유닉스 계열의 OS에서 최초로 실행되는 데몬 프로세스이며 PID는 항상 1입니다. 생성된 자식 프로세스는 각자 고유의 PID, 메모리, CPU 등 새 PCB가 할당되며 고유의 자원을 획득하게 됩니다. 이로 인하여 부모 프로세스의 자원 접근에 제한이 생기며 특수한 방법을 통해 공유할 수 있게 됩니다. 프로세스를 생성한 후 부모 프로세스는 다음과 같이 2가지 행동을 할 수..

[운영체제] 비전섬 스케줄링 vs 선점 스케줄링

비선점 스케줄링 할당된 프로세스를 CPU에서 강제로 내보낼 수 없으며 프로세스가 작업을 완료하거나 입출력 이벤트 등 인터럽트 발생 시에만 CPU를 반환하여 다른 프로세스가 사용할 수 있게 됩니다. 우선순위에 따라 ready queue 내에 프로세스의 위치가 달라질 수 있습니다. 장점 : 복잡한 알고리즘이 필요 없으며 context switch발생이 매우 적으므로 응답 시간이 적습니다. 단점 : 공정성이 없으며 대기시간이 높습니다. 또한 우선순위에 의해 무한정 대기가 발생할 수 있으며 시스템에 중요한 작업을 빠르게 해결하지 못할 수 있습니다. 알고리즘에 따라 인터럽트가 발생하더라도 CPU를 반환하지 않는 경우도 있으며 사용 효율이 줄어듭니다. 단순 반복 작업에 유리하여 일괄 처리 방식에 적합합니다. 선점 ..

[운영체제] Scheduling

스케줄링 스케줄링은 보통 멀티프로그래밍을 가능하게 하는 운영 체제의 동작 기법이며 어느 프로세스를 CPU에 얼마큼 할당할지를 결정하는 기법입니다. CPU 외에 자원을 할당할 때 스케줄링 작업을 거치기도 합니다. 스케줄링 용어 멀티프로그래밍 : CPU의 활용 극대화, 많은 프로그램이 동시에 실행 시간 공유 : 프로세스들이 자원을 공유 프로세스 스케줄링 : CPU에서 실행될 프로세스를 선택 Job Queue : 실행할 프로세스들의 PCB들의 모임 Ready Qeueu : 실행을 위해 모든 준비가 완료된 프로세스들의 PCB 모임 Device Qeueu(=waiting queue) : 자원을 사용 중이거나 사용하기 위해 기다리는 프로세스들의 모임, 각 장치들이 각자 고유의 큐를 가짐 스케줄링의 종류 장기 스케줄..

[운영체제] Context Switch

Context Switch Context란 CPU가 해당 프로세스를 실행하기 위한 정보로 지난 시간에 배운 PCB에 저장되어 있는 프로세스의 상태 정보를 의미합니다. 우리가 사용하는 컴퓨터에서 여러가지 프로그램을 동시에 동작할 수 있도록 만들어 주기 위해 현재 Context를 저장해 두고 다른 프로세스의 Context를 불러와 실행시켜 마치 실시간으로 여러 개의 프로그램이 동작하는 것처럼 보여줍니다. 이러한 일련의 과정을 Context Switch로 부릅니다. 보통 프로세스에 주어진 CPU 시간이 다 되거나 입출력 등을 위해 스스로 인터럽트를 발생, 우선순위가 높은 프로세스가 CPU를 점유하기 위해 인터럽트 요청을 했을 경우 발생합니다. Context Switch의 과정 프로세스 상태 변화에서 ready..

[운영체제] 프로세스

프로세스란? 프로세스는 실행 중에 있는 프로그램을 의미합니다. 프로그램은 디스크나 다른 저장소에 저장되어 있는 코드로 된 실행 가능판 것을 의미하고 프로세스는 프로그램을 실행시켜 메모리에 올려진 상태를 말합니다. 같은 프로그램을 여러 번 실행시키면 프로그램은 하나지만 프로세스는 여러 개가 생깁니다. 프로그램이 동작하러면 운영체제가 프로세스들을 관리하기 위하여 각 프로세스마다 정보를 매깁니다. 이 정보에는 PC, 레지스터, 메모리, 프로세스 IP, 부모 프로세스, 프로세스의 현재 상태 등이 있습니다. 프로세스의 메모리 형태 프로세스는 자기만의 고유 메모리를 가지고 있습니다. 이 고유 메모리는 논리적으로 형성되어 있으며 각 영역에 해당되는 정보들이 실제 물리적 메모리 공간에 할당이 됩니다. Stack 영역(..

[운영체제] OS 디자인과 구현

운영체제는 사용될 환경, 자원 등에 의해 다르게 디자인됩니다. 일반 사용자들이 많이 사용하는 윈도우, 개발자들이 많은 기능을 사용하기 위하여 리눅스 등 사용자에 따라 바뀌기도 합니다. 디자인의 목적 : 보통 관점에 따라 2가지로 분류합니다. 사용자 입장 : 사용하기 편함, 배우기 쉬움, 빠른 속도, 신뢰성 등 시스템 입장 : 적용하기 쉬움, 호환성, 유지보수, 유연성, 장애 복구 능력 등 목적은 운영체제를 설계하기 나름이므로 환경, 자원 등에 맞춰 적절하게 맞추도록 합니다. 디자인 시 사용하는 2가지 용어가 있습니다. Mechanisms : 수행하는 방법 Policy : 수행에 의해 나오는 결과 이렇게 2가지로 나누는 이유는 매커니즘을 통해 결과를 만들어 내는 구조는 잘 변하지 않지만 만들어 내는 결과물..

[운영체제] 시스템 콜과 인터럽트

시스템 콜 정의를 보면 운영체제의 커널이 제공하는 서비스에 대해, 응용 프로그램의 요청에 따라 커널에 접근하기 위한 인터페이스라고 합니다. 간단하게 말하자면 운영체제 서비스를 접근하기 위한 유일한 수단입니다. 프로그램을 실행하거나 프로그램이 컴퓨터 자원을 사용하기 위해서는 시스템 콜을 통해 커널에 자원 사용을 요청을 해야 합니다. 시스템 콜의 주요 세 가지 기능은 다음과 같습니다. 사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있도록 한다. = 운영체제 서비스에 접근을 할 수 있게 해 줍니다. 시스템 호출을 하면 사용자 모드에서 커널 모드로 바뀐다. 커널에서 시스템 호출의 작업이 끝나면 사용자 모드로 돌아간다. 여기서 말하는 사용자 모드와 커널 모드의 의미를 조면 사용자 모드는 사용자가 프..

[운영체제] Intro

운영체제란? 운영체제의 정의를 보면 시스템 하드웨어를 관리, 응용 소프트웨어를 실행하기 위하여 하드웨어 추상화 플랫폼, 공통 시스템 서비스를 제공하는 시스템 소프트웨어입니다. 간단하게 풀어 설명하자면 하드디스크, CPU, GPU 등 하드웨어를 관리하고 사용자가 이를 활용할 수 있게 해 주며, 사용자가 작성한 프로그램이 하드웨어를 사용하고, 시스템 서비스 등을 활용할 수 있게 만들어주는 하나의 큰 소프트웨어입니다. 주요 목적은 다음과 같습니다. 사용자가 프로그램을 쉽게 작성, 실행할 수 있도록 도움을 줍니다. 컴퓨터 시스템을 효율적으로 관리, 사용할 수 있도록 합니다. 하드웨어, 장치 등을 효율적으로 관리, 사용할 수 있도록 합니다. 사용자, 응용 소프트웨어가 시스템 서비스를 활용할 수 있게 해 주며, 하..