본문 바로가기
Computer Science

프로세스의 구조와 컨텍스트 스위칭

by 개발자 데이빗 2021. 12. 27.

일반적인 프로세스의 구성

stack (스택프레임)

함수 호출 또는 로컬변수

함수 내부에도 별도 변수를 지정할 수 있으며 함수 실행이 끝나면 사라진다.

때문에 함수가 실행되는 동안만 변수를 저장되는 공간이 필요한데 이 공간을 stack이라 한다.

해당 변수를 각각 함수가 끝날때 실행될 영역인 return address와 함께 stack에 저장하고

해당 함수 실행이 끝나면 각각의 변수를 지우고 return address를 찾아간 후 return address 또한 지우고 다음 코드를 실행한다.

 

함수 내부에서 또다른 함수가 실행되는 경우

두번째로 실행된 함수 내부의 변수와 return address가 더 나중에 저장이 되고 이 함수가 더 먼저 종료되기 때문에 이 함수의 변수와 return address가 먼저 지워진다.

 

LIFO(Last In First Out) 구조이다.

 

함수가 실행될때 스택에 데이터가 저장되는 순서

  • 스택포인터의 최상단에 EBP 값이 저장된다.
  • return address와 함수 인자, 지역변수들이 순서대로 저장된다.
  • 해당 함수 내부에서 또다른 함수가 실행되는 경우 EBP는 함수가 실행된 순간의 최상단 스택포인터로 바뀐다. (에러추적용이)
  • 함수가 종료되면 리턴값을 EAX에 저장한다.
  • 지역변수, 함수 인자, return address, EBP값 순서대로 지워진다.

 

heap

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

int main()
{
  int *data;
  data = (int *) malloc(sizeof(int)); // 동적으로 메모리를 생성 (heap 공간)
  *data = 1; 
  printf("%d\n", *data);
  
  return 0;
}

해당 코드에서 data 변수는 stack에 저장이 되고 data의 값으로 동적으로 생성된 heap 메모리의 주소가 들어간다.

stack에 저장된 data가 가리키는 주소(heap memory)에 1값을 저장한다.

 

data

선언된 변수가 저장되는 공간

 

BSS 영역

초기화되지 않은 전역변수

 

DATA 영역

초기화된 전역변수

 

text (code)

프로그램의 코드가 컴파일되어 저장되는 공간

 

컨텍스트 스위칭 (문맥 교환)

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

  1. 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서 메인 메모리에 저장한다.
  2. 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보를 CPU에 넣고 실행한다.

 

A 프로세스와 B 프로세스가 있을때

스케줄러가 running 상태의 A프로세스를 B 프로세스로 바꿔주는 것

 

A 프로세스에서 B 프로세스로 변경되는 경우

ProgramCounter와 StackPointer (Context) 를 프로세스마다 관리하는 PCB에 저장한 후 B 프로세스로 바꿔준다

다시 A프로세스가 실핼될 때 저장된 PCB의 Context를 가져와 CPU의 Context에 덮어 씌운다.

실행되던 프로세스의 구조는 그대로 남아있어 가져온 Context의 PC와 SP에 따라 다시 프로세스를 실행한다.

컨텍스트 스위칭의 경우는 굉장히 빈번하게 일어나기 때문에 어셈블리어로 작성된다.

 

초기 컴퓨터 프로그램은 어셈블리어로 작성

서로 다른 cpu 아키텍처가 등장할 때마다 매번 똑같은 프로그램 작성 (이식성이 떨어짐)

 

컴파일러 등장

cpu 아키텍처에 따라서 컴파일러 프로그램만 만들면 기존 코드는 재작성할 필요가 없다 (이식성 향상)

 

PCB (Process Context Block)

프로세스가 실행중인 상태를 캡쳐/구조화해서 저장한다.

  1. Process ID
  2. Register 값 (PC,SP 등)
  3. Scheduling Info (Process State) - ready, block, running 
  4. Memory Info (메모리 사이즈 limit)
  5. Priority (우선순위)

Dispatch

ready 상태의 프로세스를 running 상태로 바꾸는 것

 

스택오버플로우 (추가지식)

주로 해커들의 공격에 활용

C언어의 strcpy 코드를 실행하여 stack memory에 return address를 원하는 주소로 덮어 씌운 후에 관리자 권한을 얻어내는 공격

'Computer Science' 카테고리의 다른 글

스레드 (Thread)  (0) 2021.12.29
프로세스간 커뮤니케이션 (IPC)  (0) 2021.12.28
인터럽트  (0) 2021.12.26
프로세스 스케줄링 알고리즘  (0) 2021.12.25
운영체제 스케줄링의 종류  (0) 2021.12.20

댓글