| 니앙팽이 - 멀티스레딩 | 4 | 프로세스

2025. 1. 18. 19:17·CS/OS
4_process

⏱️ 4. 프로세스

📄 1. 프로세스의 PCB 구성 요소

PCB 구성 요소 설명
① 프로세스 식별자 (PID)
② 프로세스 이름
③ 프로세스 상태 정보 1. 준비, 실행, 대기, 종료
2. 프로그램카운터 (PC) : 다음에 실행할 명령어 주소
3. CPU 레지스터 값
④ 가상 메모리 정보 가상 메모리와 실제 메모리 매핑 정보
⑤ 스케쥴링 정보 1. 우선순위
2. CPU 점유 시간
3. 프로세스가 입출력 작업을 완료할 때까지 대기해야하는 정보
⑥ 자원의 타입 1. CPU 점유 시간
2. 메모리 공간
3. I/O 장치

📄 2. 프로세스 상태 & 상태 전이

상태 (Node) & 상태 전이 (Arrow)


1). 상태

상태 설명
① 생성 (new) 1. "Ready" 상태로 이동하기 전의 초기화 단계
2. PCB 생성
② 준비 (Ready) 1. 실행 큐에 위치
2. CPU 이용 여부가 결정된다면 "Running" 상태로 전환 혹은 CPU를 반납하여 다시 할당받아야 하는 상태임
3. 메모리 최적화를 위해 Swap-in & Swap-out 과정이 포함됨
실행이 가능하지만 메모리가 부족할 때, 스왑 아웃하여 메모리를 확보할 수 있음
③ 실행 (Running) 1. CPU를 점유하는 단계,
다음 3가지 요인으로 다른 상태로 중간에 전환됨
"1. Timeout" / "2. I/O 요청" / "3. 선점 인터럽트"
④ 대기 (Waiting) 1. I/O 요청에 의해 전환된 상태, 완료되면 다시 Ready로 전환
2. CPU을 자발적으로 반납한다.
3. 메모리 최적화를 위해 Swap-in & Swap-out 과정이 포함됨
* 입출력 작업을 기다리는 동안 CPU를 사용하지 기 때문에
이러한 프로세스는 실행을 위해 즉각적으로 메모리에 있을 필요가 없으므로,
시스템의 메모리가 부족할 때 스왑 아웃의 우선 대상이 될 수 있음
⑤ 종료 (Terminated) 1. 프로세스 작업이 완료되고 프로세스가 해제되어 소멸하는 상태
2. 모든 자원을 해제하고 PCB가 삭제됨

2). 상태 전이

상태 전이 설명
① Dispatch (Ready -> Running) 작업을 시작
② TimeOut (Running->Ready) CPU 점유시간이 모두 사용되었을때 Ready로 전환하는 상태
❌ Running->Waiting이 아니다! ❌
③ Preemption (Running -> Ready) CPU 점유시간이 비록 사용되지 않더라도 높은 우선순위 프로세스에 의해 CPU를 뺏기기도 한다.
④ Block (Running -> Waiting) I/O 요청을 기다려야 할 때, 자발적으로 CPU를 반납하고 Waiting 으로 전환하는 과정
⑤ Wake-up (Waiting -> Ready) I/O 요청이 완료되어 Ready 상태로 전환하는 과정
⑥ Terminate (Running -> Terminated) 작업이 완료되거나 오류로 실행할 수 없을때, 프로세스 자원을 해제하고 PCB를 삭제함

📄 3. Context Switching

CPU 입장에서 프로세스가 다른 프로세스로 전환할 때 발생하는 과정

  1. Running 이였던 프로세스 상태를 저장 == "Context를 저장하고"
  2. Dispatch 하여 Next 프로세스를 실행할때, 이전 복원할 내용이 있으면 상태를 복원 하는 작업을 수행한다.
  3. 문맥 교환 타이밍은 스케쥴링 기법에 따라 정해진다.
    • 각 스레드에 대한 동적 우선 순위를 유지하며,
      인터랙티브 스레드를 우선시하여 특정 스레드가 기아상태가 되는것을 방지한다.

1). 절차

① Current Process's Context Save

PCB에 다음 컨택스트들을 저장한다.

  1. CPU 레지스터 컨택스트 : "프로그램 카운트", "스택 포인터"
  2. 메모리 주소 공간 컨택스트 : 현재 프로세스가 사용하는 메모리 주소 공간을 저장
② Next Process's Context Reload

Next Process의 컨택스트를 읽어온다.

  1. CPU 레지스터 컨택스트 : "프로그램 카운트", "스택 포인터"
  2. 메모리 주소 공간 컨택스트 : 현재 프로세스가 사용하는 메모리 주소 공간을 저장

문맥교환 Context_Switcing

Stop thread 1 ->
Schedule thread 1 out ->
Schedule thread 2 in ->
Start thread 2

다른 스레드로 Context_Switcing한다면
현재 스레드의 리소스, 데이터를 저장하고
또 다른 스레드의 리소스를 CPU & 메모리에 복원해야 한다.


2). 컨택스트 스위칭 연산.

  • 컨텍스트 스위칭은 CPU 자원을 사용하는 작업이라 오버헤드가 당연히 발생한다.
    컨텍스트 저장 및 복원해야 하는 작업은 데이터에 비례해 연산량이 높아짐.

스레싱

  • 너무 많은 스레드를 가동하게 되면 스레싱이 발생한다.
  • Context_Switcing에 더 많은 비용이 들어가는 문제가 생긴다.

📄 4. 협력 프로세스(Cooperative Processes)와 자원 공유

협력 프로세스의 특징

① 자원 공유 : 프로세스 사이에 자원 공유
② 동기화 : 프로세스는 작업 진행 상황에 따라 서로 동기화가 필수, 세마포어, 뮤텍스 기법이 존재한다.
③ 통신 : IPC로 서로 정보를 주고 받으며, 파이프, 메세지큐, 공유 메모리 방식이 있음

1). IPC 통신 방법

통신 방법들 설명
① 파이프 데이터 스트림 전송, "한 프로세스의 출력"->"다른 프로세스의 입력"
② 메시지 큐 프로세스간 전 메시지(데이터 블록)를 전송, 선입선출, 비동기적으로 송수신 가능
③ 공유 메모리 같은 공유 메모리를 사용해 프로세스간 자원 교환이 훨씬 빠름, 동기화 기법을 사용해야함
④ 소켓 네트워크를 통한 프로세스 통신이 가능함, TCP/UDP 프로토콜을 사용함
⑤ 시그널 비 동기적으로 다른 프로세스에 이벤트를 발생했음을 날린다.
④ 소켓 통신
  1. 서버 차례 (소켓 생성) : 서버는 소켓을 생성하고, 특정 포트에 바인드 하여, 클라이언트측 연결 요청을 대기함, 클라이언트의 연결을 수락하는 책임 또한 있다, 마지막으로 데이터를 받고 응답을 전송하는 역할도 해야한다.
  2. 클라이언트 차례 (서버에 연결 요청) : 서버의 "IP 주소& 포트번호"를 사용해 서버에 연결을 시도, 마찬가지로 데이터 전송과 응답을 받는 역할도 해야한다.
  3. 데이터 송수신 (소켓 사용) : 클라가 서버에 연결이 성립되면 소켓을 통해 데이터를 송수신 할 수 있음.
  4. 연결 종료 : 데이터 전송이 완료되면 양쪽 프로세스 모두 소켓 연결을 종료함

참조

  • 병행 프로세스
저작자표시 (새창열림)

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

| 니앙팽이 - 멀티스레딩 | 6 | 스레드  (0) 2025.01.18
| 니앙팽이 - 멀티스레딩 | 5 | 성능 평가 척도  (0) 2025.01.18
| 니앙팽이 - 멀티스레딩 | 3 | 프로그램을 처리하는 발전 흐름  (0) 2025.01.18
| 니앙팽이 - 멀티스레딩 | 2 | OS가 메모리를 관리하는 방법  (0) 2025.01.18
| 니앙팽이 - 멀티스레딩 | 1 | 스택과 힙  (0) 2025.01.18
'CS/OS' 카테고리의 다른 글
  • | 니앙팽이 - 멀티스레딩 | 6 | 스레드
  • | 니앙팽이 - 멀티스레딩 | 5 | 성능 평가 척도
  • | 니앙팽이 - 멀티스레딩 | 3 | 프로그램을 처리하는 발전 흐름
  • | 니앙팽이 - 멀티스레딩 | 2 | OS가 메모리를 관리하는 방법
니앙팽이
니앙팽이
  • 니앙팽이
    니앙팽이 블로그
    니앙팽이
  • 전체
    오늘
    어제
    • 분류 전체보기 (126)
      • 그림그리기 (7)
      • 음악 (4)
        • FL Studio & MIDI (2)
        • 자작곡 (2)
      • 게임 (7)
        • 모바일 (0)
        • 스팀 (0)
        • 닌텐도 (0)
        • 개발 (7)
      • CS (44)
        • SW 공학 (27)
        • DB (7)
        • OS (9)
        • 네트워크 (1)
      • 팁 (9)
      • Language (21)
        • C# (8)
        • C&C++ (3)
        • 파이썬 메모 (3)
        • Javascript (7)
      • PS (0)
        • 알고리즘 (24)
        • 자료구조 (8)
        • 수학 (1)
        • 선형대수 (0)
        • 오토마타 (1)
        • 이산수학 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    프로그래머스
    자료구조
    프로세스
    unity
    c#
    객체지향개발
    Stack
    KAKAO
    Javascript
    알고리즘
    파이썬
    그림 연습
    따라그리기
    클립 스튜디오
    clip studio paint
    가비지 콜렉터
    유니티
    디자인패턴
    노마드 코더
    연결리스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
니앙팽이
| 니앙팽이 - 멀티스레딩 | 4 | 프로세스
상단으로

티스토리툴바