[CS] - 운영체제(1)

박진우·2022년 8월 10일
0

Computer Science

목록 보기
5/7

💡 운영체제(Operation System)

운영체제

  • 컴퓨터 시스템의 자원들을 효율적으로 관리한다.

  • 사용자가 컴퓨터를 편리하고 효과적으로 사용할 수 있도록 환경을 제공하는 여러 프로그램의 모임이다.

  • 컴퓨터 시스템과 사용자 간의 인터페이스 기능을 담당한다.

출저 : https://m.blog.naver.com/adamdoha/222027573357




◽ 운영체제 목적

응답시간 (Turnaround Time) 시스템에 작업을 의뢰한 시간부터 처리가 완료될 떄까지 걸린 시간
처리능력 (Throughput) 시스템의 생산성을 나태내는 단위. 일정시간 동안 처리하는 일의 양
사용 가능도(Availability) 시스템을 얼마나 빠르게 사용할 수 있는가의 정도
신뢰도 (Reliability) 주어진 문제를 얼마나 정확하게 처리하는가의 정도




◽ 운영체제의 기능

  • 프로세서, 기억장치, 입출력 장치, 파일정보 등의 자원관리

  • 자원을 효율적으로 관리하기 위해 자원의 스케줄링 기능 제공

  • 사용자와 시스템 간의 편리한 인터페이스 를 제공

  • 시스템의 각종 하드웨어 네트워크 관리 및 제어

  • 데이터를 관리하고 데이터 및 자원의 공유 기능 제공

  • 시스템의 오류 검사 및 복구

  • 자원 보호 기능 제공

  • 입출력(I/O) 보조 기능 제공




💡 프로세스

프로세스

컴퓨터에서 실행되고 있는 프로그램으로 운영체제로 부터 자원을 할당받는 작업의 단위


◽ 프로세스의 특징

  • 프로세스는 각각 독립된 메모리 영역 (code, data, stack, heap구조)을 할당 받는다.

  • 기본적으로 프로세스 당 최소 한 개의 스레드(메인 스레드) 를 가지고 있습니다.

  • 각 프로세스는 별도의 주소 공간 에서 실행되며, 한 프로세스는 다른 프로세스의 영역접근할 수 없다.

  • 한 프로세스가 다른 프로세스의 자원에 접근하려면 프로세스 간의 통신(IPC, inter-process-communication)을 사용해야 한다.




◽ 프로세스 제어 블록(Process Control Block, PCB)

프로세스 제어블록

  • 프로세스를 관리하기 위해 필요한 프로세스 요소들의 자료구조이다.

  • 프로그램이 프로세스가 되기 위해 메모리 에 올라오는 동시에 프로세스 제어 블록이 생성된다.

  • 프로세스가 종료되고 메모리에서 삭제되면서 프로세스 제어 블록도 폐기 된다.




◽ PCB 구성요소

  • 1) 프로세스 식별자(Process ID)

  • 2) 프로세스 상태(Process State)
    생성(create), 준비(ready), 실행 (running), 대기(waiting), 완료(terminated) 상태가 있다.

  • 3) 프로그램 계수기(Program Counter)
    프로그램 계수기는 이 프로세스가 다음에 실행할 명령어의 주소를 가리킵니다.

  • 4) CPU 레지스터 및 일반 레지스터

  • 5) CPU 스케줄링 정보 
    우선 순위, 최종 실행시각, CPU 점유시간 ..

  • 6) 메모리 관리 정보 
    해당 프로세스의 주소 공간 ..

  • 7) 프로세스 계정 정보 
    페이지 테이블, 스케줄링 큐 포인터, 소유자, 부모 ..

  • 8) 입출력 상태 정보 
    프로세스에 할당된 입출력장치 목록, 열린 파일 목록 ..

  • 9) 포인터
    부모프로세스에 대한 포인터, 자식 프로세스에 대한 포인터, 프로세스가 위치한 메모리 주소에 대한 포인터, 할당된 자원에 대한 포인터 정보 ..




◽ 프로세스 상태(Process State)

생성 상태(create) : 프로그램을 메모리에 가져와 할당 하고, 제어 블록을 생성한 상태

준비 상태(ready) : 실행을 기다리는 모든 프로세스가 자기 차례 기다리는 상태

실행 상태(running) : 선택된 프로세스가 cpu를 사용 하는 상태이며, 프로세스 사이의 문맥 교환 이 일어난다.

대기 상태(waiting) : 실행 상태에 있는 프로세스가 입출력을 요청하면 입출력이 완료될 때까지 기다리는 상태

완료 상태(terminated) : 프로세스 종료 , 메모리와 프로세스 제어 블록 삭제




◽ 프로세스 상태 전이

프로세스는 아래와 같은 상태 전이를 가지며 주로 아래와 같이 명명한다.

디스패치(Dispatch) : 준비 실행

타임 아웃(Time out) : 실행 준비

대기(block) | 사건 준비(Event Wait) : 실행 대기

깨움(wake up) | 사건 발생(Event Occurs) : 대기 준비




◽ Context Switch(문맥 교환)

사용자 입장에서는 동시에 일어나는 것처럼 보이지만 실제는 아니다. CPU는 한번에 하나의 프로세스 만 처리가 가능하기 때문에 각 프로세스는 일을 처리하기 위해서 CPU 자원 을 짧은 시간내에 할당을 받아서 일을 처리한다.

  • 여러 프로세스를 처리해야 되는 상황에서 현재 하고있는 Task의 상태를 PCB에 저장하고, 다음 에 진행할 Task 를 가져오는 과정을 말한다.

  • 하나의 사용자 프로세스로부터 다른 사용자 프로세스CPU의 제어권이 다른 프로세스로 넘겨주는 과정을 말한다.




◽ 프로세스 핵심 시스템 콜

◾ 자식 프로세스 생성 (fork)

실행 중인 프로세스를 복사하는 함수이다. 이때 부모 프로세스와 자식 프로세스가 나뉘어 실행되는데, 원래 진행되던 프로세스 부모 프로세스(parent) , 복사된 프로세스 자식 프로세스(child) 라고 한다.

  • fork() 시스템 호출의 장점

    • 빠른 속도의 프로세스 생성 : 하드디스크로부터 프로그램을 새로 가져오지 않고 기존 메모리 에서 복사 하기 때문에 추가 작업 없이 자원을 상속할 수 있다.

    • 효율적인 시스템 관리 : 프로세스를 종료했을 때 필요한 메모리 영역, 파일, 하드웨어 정리를 부모 프로세스에 맡긴다.


◾ 자식 프로세스의 종료 대기 (wait)

부모 프로세스가 fork() 함수를 사용하여 자식 프로세스를 생성하였을 때, fork() 함수가 리턴되는 시점부터 2개의 프로세스가 동작하게 된다.

부모 프로세스가 자식 프로세스의 종료 상태를 얻기 위해서는 wait() 함수를 사용하여 자식 프로세스가 종료 될 때까지 기다릴 수 있다.



◾ 프로세스 변환,전환 (exec류 함수)

  • 현재의 기존의 프로세스를 새로운 프로세스로 전환하는 함수이다.

  • 프로세스의 구조체 재활용 하기위해 사용된다.

  • 이미 만들어진 PCB, 메모리 영역, 부모-자식 관계 그대로 사용 할 수 있어 편리하다.


◾ 프로세스간 통신 (pipe)

  • 여러개의 프로세스가 공통으로 사용하는 임시공간

  • fork() 메소드를 이용해 자식 프로세스를 만들었을 때, 부모와 자식 프로세스 간의 통신 을 위해 사용하는 기법

  • 단방향 통신

  • pipe함수를 호출하고 파이프의 [1]은 쓰기용 파이프, [0]은 읽기용 파이프



◽ fork()와 exec()의 차이

fork()와 exec()는 모두 한 프로세스가 다른 프로세스를 실행시키기 위해 사용한다.

  • fork()
    새로운 프로세스를 위한 메모리를 할당한다.

    fork()를 호출한 프로세스를 새로운 공간으로 전부 복사하게 되고, 원래 프로세스는 원래 프로세스대로 작업을 실행하고 fork()를 이용해서 생성된 프로세스도 그 나름대로 fork() 시스템 콜이 수행된 라인의 다음 라인부터 실행된다.

    프로세스가 하나 더 생기는 것이다.


  • exec()

    fork()처럼 새로운 프로세스를 위한 메모리를 할당하지 않고, exec()를 호출한 프로세스가 아닌 exec()에 의해 호출된 프로세스만 메모리에 남게된다.




◽ 프로세스 계층 구조

  • 부모 프로세스를 복사하여 자식 프로세스 를 만드는 방법으로 프로세스끼리 계층 구조를 갖는 것을 말한다.

  • 부모 프로세스는 자신의 자원을 자식 프로세스에 상속하고 자식 프로세스가 종료되면 그 자원을 회수한다. 이는 동시에 여러 작업을 처리하고 종료된 프로세스의 자원을 회수하는데 유용하다.




◽ 고아 프로세스

  • 부모 프로세스가 자식 프로세스보다 먼저 종료되는 경우 부모 프로세스가 없는 자식 프로세스 를 말한다.

  • 운영체제는 이러한 고아 프로세스를 허용하지 않으며 부모 프로세스 먼저 종료 되면 자식 프로세스 새로운 부모 프로세스init(PID = 1) 가 설정된다.

  • init 프로세스는 자식 프로세스가 종료될 때까지 기다린 후 wait 함수를 호출하여 고아 프로세스의 종료 상태를 회수 하여 좀비 프로세스가 되는 것을 방지한다.

  • 고아 프로세스는 프로세스 자신이 시스템의 자원을 낭비할 수 있고, 시스템이 프로세스가 종료될 때까지 추적을 해야 하기 때문에 성능 저하의 원인이 된다.




◽ 좀비 프로세스

  • 좀비프로세스의 정의는 실행이 종료되었지만 아직 삭제되지 않은 프로세스를 말한다.

  • 부모프로세스가 wait()계열 함수를 호출해서 자식프로세스 정리하지 않았을 경우 발생한다.




◽ 프로세스 간 통신 종류

  • 프로세스 내부 데이터 통신

    하나의 프로세스 내에 2개 이상의 스레드가 존재하는 경우의 통신 ,프로세스 내부의 스레드들이 전역변수 파일 을 이용하여 데이터를 주고받는다.

  • 프로세스 간 데이터 통신

    같은 컴퓨터 내에 있는 여러 프로세스들이 공용 파일 또는 운영체제가 제공하는 파이프를 이용하여 통신한다.

  • 네트워크를 이용한 통신

    여러 컴퓨터가 네트워크로 연결되어 있을 때. 소켓 을 이용한다.




◽ 프로세스 간 통신의 분류

프로세스 간 통신은 동시에 실행되는 프로세스끼리 데이터를 주고받는 작업을 의미한다.

  • 양방향 통신 : 데이터를 동시에 양쪽 방향 으로 전송할 수 있는 구조. ➡ 소켓 통신

  • 반양방향 통신 : 양쪽 방향 모두에 전송할 수 있지만, 동시 전송은 불가능 한 경우. ➡ 무전기

  • 단방향 통신 : 한쪽 방향으로만 데이터를 전송할 수 있는 구조. ➡ 전역 변수 OR 파이프




◽ 통신 구현 방식에 따른 분류

전역 변수를 이용한 통신의 문제는 언제 데이터를 보낼 지 받는 쪽에서 모르는 것이다.

따라서 상태 변화를 살펴보기 위해 반복문을 무한 실행 하며 기다리는 것을 busy waiting 이라고 한다.

이 문제를 해결하기 위해서 데이터가 도착했음을 알리는 동기화 를 사용한다.

동기화 기능이 있는지 없는지에 따라 대기가 있는 통신(blocking communication)대기가 없는 통신(non-blocking c-)으로 구분 된다.




◽ message queue

메시지 큐(Message Queue)는 프로세스 또는 프로그램 간에 데이터를 교환 할 때 사용하는 통신 방법 중에 하나로, 메시지 지향 미들웨어(Message Oriented Middleware:MOM)를 구현한 시스템을 의미한다.

  • 메모리 를 이용한 파이프로, 커널에서 제공하는 fifo구조의 메시지 큐를 사용한다.




**◽ 공유 메모리

  • 시스템상의 공유 메모리 를 통해 통신 (프로세스 간 양방향 통신)

  • 크기의 메모리를 프로세스 간에 공유하는 구조로, 공유 메모리 커널에서 관리된다.

  • 기본적으로는 각 프로세스의 메모리는 다른 프로세스에서 접근할 수 없다.

  • 메모리 자체를 공유하기에 불필요한 데이터 복사의 오버헤드 발생하지 않기에 빠르다.

0개의 댓글