관리 메뉴

사과하는 제라스

4. Process 본문

대학 전공 공부/운영체제

4. Process

Xerath(제라스) 2022. 10. 9. 03:06

목차

    728x90
    반응형

    OS가 하는 일

    - Process 관리 - 여러가지 프로그램들을 실행하기 위해서 프로세스를 만들고 그 안에 유저가 원하는 응용 프로그램을 실행

    - Memory 관리 - 각 프로세스가 사용하는 메모리 관리

    - File 관리 -  각 프로세스가 사용하는 파일 관리

    - I/O System 관리 - 각 프로세스가 사용하는 I/O 시스템 관리

    - Networking - 네트워크를 사용하는 프로그램이 많아지면서 이를 관리해야 하는 부분도 커짐.

    - Security - 더 안전한 실행환경을 위한 연구 증가.

    프로세스가 만들어지는 과정

    컴파일러(Compiler)

    : 사람이 이해 가능한 PL로 작성된 Source Code -> CPU가 이해할 수 있는 기계어인 Object 파일로 변환

    (정확히는 Source Code를 Compiler를 통해 assembly언어로 바꾸고 이를 Assembler가 Object 파일로 바꿈.)

     

    링커(Linker)

    : 관련된 여러 Object 파일들과 라이브러리들을 연결해서 Executable File로 변환

     

    로더(Loader)

    : Executable File을 실제 Memory에 올려주는 역할로 OS의 일부.

     

    <동작 과정>

    1) Executable File의 Header를 읽어 Text, Data의 크기를 결정

    2) 프로그램을 위한 VM Address Space를 생성

    3) 실행 명령어, Data들을 VM Address Space로 복사

    4) 프로그램의 Argument들을 Stack으로 복사

    5) CPU 내 Reister를 초기화(), Start-up Routine으로 Jump(PC Register의 값을 변경)

     

    Runtime System

    : 프로그램이 잘 실행될 수 있도록 해주는 시스템의 보조장치.

    -> 프로그램의 효율적 실행을 위해 프로그램과 연결하여 상호작용을 함.

     

    ex) C Runtime System

    1) GCC가 Start-up Code Object 파일을 추가하여 프로그램을 컴파일하고 이때 기본 라이브러리가 동적 링크됨.

    2) 프로세스 시작을 위해 커널은 PC값을 _start함수의 주소로 지정함.

    3) _start 함수는 동적 링크된 C 라이브러리 및 쓰레드 환경을 초기화하기 위해 _libc_start_main 함수를 호출함.

    4) 라이브러리 초기화 진행 후 프로그램의 main함수가 호출됨.

     

    Process 개념

    1) Abstraction For

    - Execution Unit(스케쥴링의 단위)

    - Protection Domain(서로 침범하지 못함) - 서로 다른 프로세스의 VM space에 접근 불가능

    2) Implemented With

    - PC

    - Stack

    - Data Section

    프로세스는 저장장치에 저장된 프로그램이 메모리에 로드된 상태, 실행 중인 상태이다.

    1) 프로그램의 헤더로부터 meta data 읽어들임.

    2) Text Size, Data Size 등등의 정보를 받아와서 각각 Text Segment, Data Segment에 올려줌.

    3) Text(Machine Instruction들이 적힌 공간), Data(Machine Instruction이 사용되는 공간)

    4) bss Section(초기화되어 있지 않은 전역변수들이 올라가는 섹션)

    VM Space Layout

    프로세스의 상태

    프로세스는 상태를 갖는다.

     

    1) New: 처음으로 프로세스가 생성되고 있는 상태

    2) Running: 프로세스에 로딩된 프로그램의 Instruction들이 실행되고 있는 상태

    3) Waiting: 프로세스가 특정 이벤트가 일어나기를 기다리고 있는 상태(ex)특정 I/O 작업을 요청 후 이 작업이 발생하기를 기다리고 있는 상태)

    4) Ready: Waiting 이후 프로세스가 다시 시작할 수 있어서 대기하고 있는 상태, 언제든지 Running 상태로 바뀔 수 있는 상태

    (Waiting, Ready 상태 모두 기다리는 상태이지만 Waiting 상태에서 Ready 상태로 바뀐 후 Running 상태로 바뀌는 것이다.)

    5) Terminated: 프로세스가 실행을 종료한 상태

     

    커널 내에 Ready Queue, Waiting Queue, Running Queue를 두고 프로세스들을 상태에 따라 관리한다.

     

    1) Running Queue에 있는 작업이 실행 중임.

    2) 이 작업에서 특정 I/O 작업을 요청하면 Running Queue에 있는 프로세스는 사라지고 Waiting Queue에 I/O 작업 프로세스가 올라감.

    3) 특정 이벤트가 발생하면 Waiting Queue에 있는 프로세스가 Ready Queue로 이동함.

    4) 해당 큐에 있는 프로세스는 Running Queue에 자리가 비면 그곳으로 들어가 실행됨.

    - timer interrupt: 프로세스가 실행될 수 있는 주어진 시간이 다 끝난 경우

     

    Process Control Block(PCB)

    : OS에서 프로세스를 관리하기 위해서 만든 Data Structure.

    Process Control Block의 구조

    1) Process State

    2) Program Counter

    3) CPU Registers

    4) CPU Scheduling Information

    -> 어떤 프로세스의 스케줄링 Policy를 유저가 요청해서 수정이 가능함. or OS가 임의로 변경도 가능함. 이때 어떤 식으로 스케줄링되어야하는 프로세스인지 기록해두기 위해 쓰는 정보.

    +...

    5) Memory Management Information

    6) Accounting Information

    7) I/O Status Information

     

    어떤 PCB가 Ready Queue에 있는데 이를 스케줄링할 수 있다면

    1) 이 PCB의 상태를 Running으로 변경,

    2) CPU 레지스터값을 복원함.

    3) PC값을 이용하여 CPU의 PC값을 변경하여 이전 상태의 프로그램 상태로 변경이 가능함.

     

    문맥 변환(Context Switch)

    : 현재 진행하고 있는 Task(Process, Thread)의 상태를 저장하고 다음 진행할 Task의 상태 값을 읽어 적용하는 과정.

     

    - CPU가 새로운 프로세스를 실행 시, Kernel은 현재 프로세스의 상태들을 save하고 새로운 프로세스를 load함.

    - Context Switching 시 OS가 시간을 많이 차지할 경우 전체 Code Set에 문제가 생기기에 이때는 OS가 특별한 일을 하지 않음.

    - Context Switching 시간은 HW의 지원에 따라 변경될 수 있음.

     

    프로세스 구조에 따른 Context Switching 차이

    CISC

    - 명령어가 매우 많음 ∴ 회로가 복잡하고(이로 인해 물리적인 공간차지를 많이하게 되어 CPU 레지스터를 많이 가질 수 없음), 클럭 속도가 낮아짐.

    - CPU 레지스터를 적게 가지기 때문에 이를 Save, Load하는데 걸리는 시간이 짧음 -> Context Switching Time이 빠름. 

    RISC

    - 명령어 set이 간단함(Instruction개수가 작음) -> 대신 클럭속도를 높여서 빠른 수행을 진행함.

    - 비교적 간단한 회로로 구성되기에 레지스터가 많음 ∴ Context Switching 시간이 김.

    Context Switching 도식표

    Process Creation

    - 프로세스는 동시적으로(Concurrently) 실행이 될 수 있어야 하고, 생성 및 종료는 유저의 요청으로 동적으로(dynamically) 수행될 수 있어야 한다.

    - OS는 프로세스의 생성, 종료를 담당하고 있는 루틴의 메커니즘을 제공해야 함.

     

    - 부모와 자식 프로세스의 관계로부터 새로운 프로세스가 생성이 됨(프로세스의 생성은 기존의 프로세스(부모 프로세스)로부터 생성)

    - 부모, 자식 프로세스는 메모리가 공유가 됨.(경우에 따라 자식이 부모 프로세스의 메모리를 일부만 접근or 아예 접근 불가능하게 하는 것도 가능)

     

    Memory 측면에서의 프로세스 생성

    1) 새로운 프로세스가 Fork 시스템 콜에 의해서 생성됨. 이 프로세스는 부모 프로세스의 메모리를 그대로 가지고 있음.

    2) Exec 시스템 콜을 통해 현재 부모 프로세스에 있지 않은 '현재 실행하려는 프로그램'을 자식 프로세스 안에서 메모리에 올려서 실행함.

     

    이렇게 복제하는 방법의 장점은...????

    - Kernel을 매번 VM space에 로딩하는 작업이 불필요해짐.

    - 다른 여러 시스템 라이브러리를 새로 로딩해주어야 하는 작업이 불필요해짐.

    즉, 공유되는 메모리는 물리 메모리에 한번만 적재해주면 되기에 메모리를 조금만 사용해도 됨.

    UNIX 환경에서의 프로세스 생성

    - fork()는 Error 발생 시 0보다 작은 값을 리턴하고, 자식 프로세스를 생성했다면 0보다 큰 값을 리턴, 자식 프로세스에게는 0을 리턴해준다.

    - wait()으로 부모 프로세스는 자식 프로세스의 종료 상태 혹은 자식 프로세스가 마지막으로 리턴하는 값을 받아옴.

    Window 환경에서의 프로세스 생성

    - CreateProcess()를 통해 자식 프로세스를 생성함.(이때 이 함수는 True or False를 리턴함.)

    - WaitForSingleObject()는 UNIX의 wait()와 같은 자식 프로세스를 기다리는 함수임.

     

    프로세스 생성 계층도(UNIX)

    전원 버튼 누름 - BIOS가 start up task를 실행 - HW를 사용하며 시스템이 부팅됨 - 부트로더가 커널 이미지를 메모리에 올려서 실행을 함(이게 root!) - PC를 Kernel 쪽으로 옮김 - start kernel이란 함수가 실행되며 여러가지 셋업함 - init 프로세스를 만듦(유저 프로세스 세상에서 돌아가는 프로세스이자 최초의 프로세스로 모든 유저 애플리케이션 프로세스의 부모 프로세스이다.) - 이후 init 프로세스를 복제하여 자식 프로세스들이 나옴

     

    커널이 init 프로세스를 만들어주고 다른 유저 프로세스들은 fork 메카니즘을 통해 생성된다.

     

    Process Termination

    - 프로세스가 종료되면 OS에게 삭제할 것을 요청하는데 이때 Exit 시스템 콜을 사용함.

    - 자식 프로세스가 terminated 상태이면 OS는 자원들을 다 해제하고 가져옴.

    - 자식 프로세스가 비정상적으로 종료되는 경우도 있는데 이때 부모 프로세스에게 시그널을 날리게 됨.

     

    Cooperating Processes

    - 각 프로세스들은 다른 프로세스의 실행에 영향을 미치거나 영향을 받을 수 없다.

    하지만...!!!

    협업을 통해 큰 태스크를 좀 더 효율적으로 처리할 수 있음, 프로그래머 입장에서 좀 더 모듈화된 프로그램을 만들어 관리 가능, 애플리케이션의 안정성을 높일 수 있음.

     

     

    728x90
    반응형

    '대학 전공 공부 > 운영체제' 카테고리의 다른 글

    6. CPU Scheduling  (1) 2022.11.02
    5. Computer Architecture  (0) 2022.10.11
    3. OS의 구조2  (0) 2022.10.07
    2. OS의 구조(with OS의 역사 및 발전)  (0) 2022.09.19
    \\\\1. OS의 개요  (0) 2022.09.13