운영체제(3)

2023. 3. 15. 13:46zerobase/CS

728x90

프로세스 구조 이해

    ● 프로세스 구조

        ○ 프로세스 (process) 는 일반적으로 어떻게 구성되어 있을까?

            - text(CODE): 코드

            - data: 변수/초기화된 데이터

            - stack: 임시 데이터(함수 호출, 로컬 변수등)

            - heap: 코드에서 동적으로 만들어지는 데이터

        ○ 프로세스와 컴퓨터 구조

            - PC(Pqrogram Counter) + SP(Stack Pointer)

            - PC: 다음 실행할 코드 주소

            - SP: 스택 최상단 주소

        ○ 임베디드 시스템등에서 동작하는 C 프로그램등은 디버깅시 PC 와 SP 를 캡쳐해서 확인

        ○ 파이썬에서 재귀함수 호출이 일정 횟수 이상이면 에러가 나는 이유

            - 고정된 스택 공간 때문임

 

힙과 컨텍스트위칭 이해

    ● Heap 이란?

        ○ 얼마나 많은 공간이 필요할지 모르기 때문에 준비된 공간

        ○ 동적메모리를 위한 공간

 

    ● JAVA GC 와 프로세스 힙

        ○ JAVA GC 가 필요한 이유

            - 불필요한 객체가 차지하는 힙 공간을 삭제하여, 힙 공간 확보가 필요하기 때문

            - 만약 힙 공간이 부족하면? 객체 생성이 불가하고, JAVA 와 같은 객체지향 프로그램은 동작 하지 않게 됨

 

    ● 컨텍스트 스위칭

        ○ Context Switching, 컨텍스트 스위칭, 또는 문맥 교환

            - CPU에 실행할 프로세스를 교체하는 기술

        ○ PC, SP만 바꿔주면, 프로세스 저장상태를 기반으로 실행 가능

 

    ● Process Control Block (PCB)

        ○ PCB에 다음 프로세스 정보 저장

            - Porcess ID, Register (PC, SP 등) 등

        ○ 리눅스등에서 프로세스를 제어하는 명령은 PID 를 기반으로 사용

            - 예: kill ‑9 PID

 

    ● 컨텍스트 스위칭 세부 동작

        ○ 1. 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서, 메인 메모리에 저장

        ○ 2. 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보(PC, SP)를 CPU의 레지스터에 넣고, 실행

 

멀티프로세스와 IPC이해

    ● 프로세스간 커뮤니케이션 (InterProcess Communication)

        ○ 프로세스는 다른 프로세스의 공간을 접근할 수 없다

        ○ 프로세스간 통신이 필요한가요?

            - 성능을 높이기 위해 여러 프로세스를 만들어서 동시 실행

            - 이 때 프로세스간 상태 확인 및 데이터 송수신이 필요

 

    ● IPC (InterProcess Communication)

        ○ 프로세스간에 커뮤니케이션을 해야한다면 어떻게 해야할까?

            - 프로세스간 통신 방법을 제공함

            - IPC: InterProcess Communcation

 

    ● 실제 프로세스: 리눅스 예

        ○ 커널 공간은 공유한다.

        ○ 어떤 프로세스나 0 ~ 4GB 까지의 메모리 주소를 가짐

 

    ● 다양한 IPC 기법

        ○ file 사용

        ○ Message Queue

        ○ Shared Memory

        ○ Pipe

        ○ Signal

        ○ Semaphore

        ○ Socket 등등

     ◎ 2번부터는 모두 커널 공간을 사용하는 것임 ‑ 이것이 핵심

 

    ● C 언어를 익혀야 하는 이유

        ○ JAVA, python 등은 사용자가 더 쉽게 개발할 수 있도록 만든 언어

        ○ 그만큼 컴퓨터 동작 이해가 부족해도 프로그램 구현이 가능

        ○ 현업에서도 C++ 등 언어를 사용하는 경우가 많음

        ○ C 언어를 익혀서, 프로그래밍을 하려면, IPC 함수, 메모리 직접 제어 기능등을 이해하고 사용해야 하 므로, C 언어를 모르는 개발자와는 더 깊은 레벨의 이해가 가능함

 

    ● 정리

        ○ 여러 프로세스 동시 실행을 통한 성능 개선, 복잡한 프로그램을 위해 프로세스간 통신 필요

        ○ 프로세스간 공간이 분리되어 있음

        ○ 프로세스간 통신을 위한 특별한 기법 필요

            - IPC (InterProcess Communication)

        ○ 대부분의 IPC 기법은 결국 커널 공간을 활용하는 것임

            - 이유: 커널 공간은 공유하기 때문

 

 

운영체제와 프로세스 동작 정리

'zerobase > CS' 카테고리의 다른 글

HTTP와 HTTPS의 차이  (0) 2023.04.29
Cross Browsing(크로스 브라우징)  (0) 2023.03.30
운영체제(2)  (1) 2023.03.15
운영체제(1)  (0) 2023.03.15
컴퓨터 구조(Computer Science)(2)  (0) 2023.03.11