반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

짧은코딩

프로세스의 메모리 구조, PCB 본문

CS/운영체제

프로세스의 메모리 구조, PCB

5_hyun 2022. 8. 22. 22:15

프로세스의 메모리 구조

OS의 메모리 할당 구조

스택, , 데이터 영역(BSS segment, Data segment), 코드 영역(code segment)로 나눠진다. 그리고 스택은 위에서 부터 할당되고 힙은 아래 주소부터 할당된다.

 

스택(stack)

스택은 지역변수, 매개변수, 함수가 저장되고 컴파일시에 크기가 결정되는 동적인 특징을 갖는다. 

스택은 함수가 함수를 재귀적으로 호출하기 때문에 동적으로 크기가 늘어난다. 이렇기에 힙과 겹치면 안돼서 스택과 힙을 반대부터 할당한다.

힙(heap)

힙도 동적으로 할당되며 런타임 시 크기가 결정된다. ex) 백터 같은 동적 배열은 힙에 할당된다.

데이터 영역

데이터 영역은 전역변수, 정적변수가 저장되고 정적인 프로그램을 종료하면 사라지는 변수가 들어 있는 영역이다. 

 

-BSS 영역

초기화가 되지 않은 변수가 0으로 초기화되어 저장된다.

 

-Data 영역(Data segment)

0이 아닌 다른 값으로 할당 된 변수가 저장된다.

코드 영역

프로그램에 내장되어 있는 소스 코드가 들어가는 영역이다. 코드 영역은 기계어로 저장되어 있어 수정이 불가능하고 정적이다.

PCB(Process Control Block)

PCB는 OS에서 프로세스에 의한 메타데이터를 저장한 데이터이다. 프로세스가 생성되면 OS는 해당 PCB를 생성한다.

 

-과정

프로그램 실행 -> 프로세스 생성 -> 프로세스 주소 값들이 프로세스 메모리 구조 기반으로 할당 -> 프로세스 메타데이터 PCB에 저장

 

이렇게 생성되며 PCB는 중요한 정보를 포함하고 있어서 커널 스택 가장 앞부분에서 관리되어 일반 사용자가 접근할 수 없다.

 

PCB의 구조

PCB는 프로세스 스케줄링 상태, 프로세스 ID 등의 정보로 이루어져 있다.

  • 프로세스 스케줄링 상태: 준비, 일시중단 등 프로세스가 CPU 소유권을 얻은 이후 상태
  • 프로세스 ID: 프로세스 ID, 해당 프로세스의 자식 프로세스 ID
  • 프로세스 권한: 컴퓨터 자원, I/O 디바이스에 대한 정보
  • 프로그램 카운터: 프로세스가 실행 할 다음 명령어 주소의 포인터
  • CPU 레지스터: 프로세스를 실행하기 위해 저장 할 레지스터 정보
  • CPU 스케줄링 정보: CPU 스케줄러에 의해 중단된 시간 등 정보
  • 계정 정보: 사용된 CPU 사용량, 실행한 유저 정보
  • I/O 상태 정보: 프로세스에 할당된 I/O 디바이스 목록

 

컨텍스트 스위칭(context switching)

컨텍스트 스위칭은 PCB를 교환하는 과정이다. 싱글 코어 기준으로 어떠한 시점에 하나의 프로세스만 수행되고 있으며 컨텍스트 스위칭이 빠르게 일어나서 여러 프로세스가 동시에 구동되는 것 처럼 보인다. (밑에 설명은 다 싱글 코어 기준이다.) 

 

-컨텍스트 스위칭 발생 조건

1. 프로세스에 할당된 시간이 끝남

2. 인터럽트 발생

 

프로세스 A를 실행다가 A의 PCB를 저장한 다음 멈추고 프로세스 B를 로드해서 실행한다. 이를 반대로도 실행한다. 

하지만 이 과정에서 유휴 시간(idle time)이 발생하고 캐시미스라는 비용이 든다.

  • 유휴 시간: 생산력이 충분히 활용되지 못하고 허비되는 등 낭비하는 시간

-비용: 캐시미스

컨텍스트 스위칭을 할 때 프로세스가 가지고 있는 메모리 주소가 그대로면 잘못된 주소 변환이 발생하여 캐시클리어 과정을 겪고 이로 인해 캐시미스가 발생한다.

 

-스레드에서 컨텍스트 스위칭

컨텍스트 스위칭은 스레드에서도 일어난다. 스레드는 스택 영역을 제외 한 모든 메모리를 공유해서 컨텍스트 스위칭 시 비용, 시간이 더 적다.

728x90
반응형

'CS > 운영체제' 카테고리의 다른 글

공유 자원과 임계 영역, 교착 상태  (0) 2022.12.24
멀티 프로세싱, 스레드와 멀티스레딩  (0) 2022.12.18
프로세스와 컴파일 과정, 프로세스의 상태  (0) 2022.08.12
메모리 관리  (0) 2022.07.26
메모리  (0) 2022.07.19
Comments