프로세스(Process)란?

운영체제로 부터 자원을 할당받는 작업의 단위

실행중인 프로그램(Task)

 

프로세스와 프로그램의 차이는??

프로그램 : 하드디스크나 SSD에 존재하고 실행을 기다리는 명령어(Code)나 Data

프로세스 : 명령어나 코드를 메모리에 적재시켜 CPU를 할당받고 프로그램을 실행하고 있는 상태

  • 실행되고 있는 프로그램

 

프로세스의 메모리 구조

  1. Text(code) 영역 : 기계어로 제어되는 메모리영역, 주로 작성하는 코드나 변하지않는 값 상수저장 읽기전용
  2. Data 영역 : 주로 전역변수가 저장되고, Static 변수도 저장되는 영역
  3. Stack 영역 : 지역 변수가 저장되며, 함수의 인자(함수호출시 전달해주는 값)들이 저장되는 영역
  4. Heap 영역 : 필요에 의해 메모리를 동적할당할때 사용되는 영역이다. 스택 영역과 힙 영역은 사실 같은 공간을 공유한다. 힙이 메모리의 낮은주소부터할당되면 스택은 높은 주소부터할당하는 식이다. 그래서 상대영역을 침범하는 일이 발생할 수 있는데 이를 stack over flow, heap over flow라고 한다.

 

프로세스의 제어블록(Process Control Block)

  • PCB는 운영체제가 프로세스의 정보를 저장해놓은 곳이고, 프로세스가 생성될때마다 고유의 PCB가 생성되고 프로세스 종료시 PCB는 제거됩니다.
  • 프로세스는 CPU를 점유하여 작업을 처리하다가 상태가 전이되면, 진행하던 작업 내용들을 정리하고 다음에 다시 작업을 수행할때 PCB로부터 정보들을 넘겨와 하던 작업을 진행합니다

 

프로세스의 상태

프로세스의 상태는 생성 / 준비 / 실행 / 대기 / 종료 총 5가지 단계로 나누어져 있다.

  1. 생성 : 사용자가 프로그램을 실행 시키는단계
  2. 준비 : 프로그램을 메모리에 load 한 단계
  3. 실행 : cpu스케줄러에 의해 점유권 획득하면 실행한 상태
  4. 대기 : I/O 작업 요청이 올시 대기후, 완료하고 다시 준비상태로 돌아감.
  5. 종료 : 완료시cpu점유권 , 메모리 반납

 

스레드란 (Thread)?

프로세스가 할당받는 자원을 이용하는 실행 단위

프로세스 내에서 실행되는 흐름의 단위

기본적으로 프로세스를 생성할시, 하나의 스레드가 생성이되는데. 이를 메인 스레드라고 부른다.

  • 스레드는 프로세스가 가지고 있는 주소공간이나 자원을 공유할 수 있다.
  • 스레드는 크게 단일 스레드와 멀티스레드로 나누어진다.
  • 단일 스레드
    • 하나의 프로세스에 하나의 스레드 실행
    • 하나의 레지스터와 스택으로 표현
  • 멀티 스레드
    • 프로세스 내에는 다수의 스레드가 존재한다.
    • 같은 프로세스내에 존재하는 스레드는 Code/Data/Heap 영역의 내용을 공유한다.
    • 장점
      • 메모리 공간과 시스템 자원소모가 줄어든다.
    • 단점
      • 스레드 하나가 프로세스 내 자원을 망쳐버린다면 모든 프로세스가 종료된다.
      • 동기화 문제가 발생할 수 있다. (작업 처리 순서를 조정하고 공유자원에 대한 권한을 컨트롤)

 

프로세스의 동기화 (동기, 비동기)

프로세스(cpu)는 한번에 하나의 프로세스만 실행 할 수 있다. 하지만 프로세스 스케줄링을 통해서 프로세스들을 빠르게 교체하면서 여러개를 동시에 실행하는것처럼 보이게하는데 이러한것을 병행 프로세스라고한다.

  • 병행 프로세스에는 독립적 프로세스 와 협력 프로세스로 나누어진다.
    • 독립적 프로세스
      • cpu에서 각각 독립적으로 여러 프로세스들이 순차적으로 수행되며, 실행중인 다른 프로세스들간에 영향도없고 데이터를 공유하지않는다.
    • 협력 프로세스
      • 다중 처리 시스템에서 모든 입출력장치와 메모리에 참조가 가능하기 때문에 다른 프로세스의 실행에 영향을 주거나 받는데 , 주로 스레드 공간을 통해 데이터를 공유하는 방식
      • 이때 동기적 수행방식과 비동기적 수행방식이 나누어짐
        • 비동기 : 프로세스들간에 정교한 협력을 통해서만 기능을 수행한다.
        • 동기 : 프로세스 동기화 필요
        <aside> 💡 프로세스 동기화란?</aside>
      • 입출력장치나 메모리와 같은 자원에 하나의 프로세스만 이용 하도록 제어하는것.

 

Notion : https://noyclah.notion.site/Process-Thread-1d04ea755857433ba1a63ecc27250999

    •  

'공부 > 네트워크 관련' 카테고리의 다른 글

터미널과 서버  (0) 2022.06.01
암호화 / 복호화  (0) 2022.06.01
Git(깃)  (0) 2022.06.01
OSI 7계층과 TCP/IP  (0) 2022.06.01
네트워크와 인터넷 (Network & Internet)  (0) 2022.06.01