프로세스

꾸준하게 달리기~·2023년 8월 28일
0

cs

목록 보기
13/16
post-thumbnail

들어가기 앞서

해당 포스팅은
https://www.youtube.com/playlist?list=PLBrGAFAIyf5rby7QylRc6JxU5lzQ9c4tN
의 강의를 보고 작성되었습니다! :)

OS는 많은 일들을 한다.
우리에게 보여지는 UI,
HW쪽의 리소스 관리(CPU, 메모리 등),
SW쪽의 리소스 관리(파일, 어플리케이션 등),
시스템 보호 등등...

여기서, 쉽게 말해 프로그램이 실행되는 상태인
프로세스에 대해 설명하려고 한다.




프로세스란?

프로세스의 정의는 쉽게 말해 실행중인 프로그램이다.

  • OS 커널에 등록되고 커널의 관리하에 있는 작업.
  • 자원을 요청하고 할당받을 수 있는 개체.
  • PCB(프로세스 자원 블록)를 할당 받은 개체.

프로세스는,
프로그램이 실행되어 메모리를 할당받으면 프로세스가 되고,
프로세스는 시스템 성능 향상을 위해 OS의 커널에 의해 관리된다.





PCB(프로세스 관리 블록)이란?

OS가 프로세스 관리에 필요한 정보를 저장하는 것이다.
프로세스가 생성될 때 생성된다.

위 사진과 같이 PCB는 메모리상에 저장되고, 커널이 관리한다.

PCB에 있는 프로세스 관리에 필요한 정보는 다음과 같다.

  • 프로세스 고유 식별 번호 (PID)
  • 스케줄링 정보
  • 프로세스 상태
  • 메모리 관리 정보 등등이 있다.

PCB는 OS의 커널이 관리하므로, PCB정보는 OS별로 다르다!




프로세스의 상태

현재 프로세스의 상태를 나타낸다.
아래의 그림과 같다.

그림에 대해 설명하자면,

  1. Create state : 프로그램을 커널에 등록한다, PCB가 생성된다.
  2. Ready state : CPU제외 모든 자원을 할당받은 상태이다.
  3. Running state : 모든 자원을 할당받은 상태이다.
  4. Asleep state : CPU외에 IO와 같은 자원을 기다리는 상태이다.
  5. Suspended state : 메모리를 할당받지 못한 상태이다.
  • create -> (ready or suspended ready)
    - 프로세스에 메모리 할당 여부에 따라, 할당되었다면 ready, 할당되지 않았다면 suspended ready 상태가 된다.

  • ready -> running
    - CPU 자원을 할당 받았는지 여부에 따라, 할당되었다면 running, 할당되지 않았다면 ready 상태가 된다.

  • running -> terminated
    - 종료 여부에 따라 진행된다.

  • asleep -> suspended blocked
    - 메모리 할당이 취소되면 진행된다.

여기까지의 설명에 대해 표로 정리하면 아래와 같다.


인터럽트

예상치 못하게 외부에서 발생한 이벤트이다.
프로세스 도중의 방해를 나타낸다.
쉽게말해, Interrupt. 방해하는것이다.

보통 공부중에, 친구가 방해하면 어떻게 행동하는지 생각해보자.
친구가 왜 방해했는지를 보고,
지금 하고있던 공부를 포기하고 같이 놀아주거나(해결),
무시하고(계속 진행) 공부를 계속할 수 있다.

인터럽트도 마찬가지이다.

프로세스 진행중 인터럽트 발생 (친구가 방해함)
프로세스 중단 (하던 일을 멈춤)
인터럽트 처리 과정 (아래 세 줄)
인터럽트 장소, 원인 파악 (왜 방해했는지 보고)
인터럽트 서비스 여부 결정 (해결하거나 계속 진행하거나)
인터럽트 서비스 루틴 호출 (해결하기로 생각하고 해당 친구와 놀아주기)

의 순서대로 인터럽트를 처리한다.

아래의 사진과 같다.




Context Switching

Context는 프로세스와 관련된 정보들의 집합이다.
Switching은 교체한다는 의미이다.

그럼, 프로세스와 관련된 정보들을 교체한다는 의미가 된다.
뭘 어디에서 어떻게 교체한다는 소리인지에 대해서는 아래에 서술하겠다.


CPU의 레지스터에는, 현재 CPU가 담당하는 프로세스에 관한 정보들이 있다.
CPU가 담당하는 프로세스가 다른 프로세스로 바뀌게 된다면,
프로세스에 관한 정보들 또한 바뀌어야 한다.
이게 바로 Context swiching 이다.


현재 그만 둘 CPU에 진행중인 프로세스의
레지스터에 있는 정보들을 다시 메모리로 옮기는
Context saving,

앞으로 실행할, 현재는 메모리상에 있는 프로세스의 정보들을
메모리에서 레지스터로 올리는
Context restoring.

위의 두가지를 합치면,
Context switching이 된다.

당연히 CPU가 담당하고 있는 프로세스를 교체하며 정보를 옮기는 작업인
Context switching에 소요되는 비용이 있으므로,
해당 비용을 줄이는 것이 중요하다.

그러면 어떻게 줄일 수 있을까?
바로 스레드 를 이용하는 것이다.

profile
반갑습니다~! 좋은하루 보내세요 :)

0개의 댓글