Researcher to Developer

01. 프로세스와 스케쥴러 3 본문

코딩/Basic

01. 프로세스와 스케쥴러 3

Probe29 2020. 12. 13. 20:22

#프로세스와 컨텍스트 스위칭
- 컨텍스트 스위칭 
A라는 프로세스가 CPU에서 실행되다가 어느 순간 스케줄러가 B라는 프로세스로 바꿔줄때
바꿔는 메커니즘을 말함

컨텍스트 스위칭을 알려면 프로세스 구조를 상세히 알 필요가 있다.

#프로세스 구성
Code가 Compile된다는 것은 컴퓨터가 이해할 수 있는 0과 1로 이루어진 기계어로 변환된다는 것

바이너리 라고도 함


프로세스 Memory의 몇 가지 영역

1. CODE(TEXT)

프로그램을 실행시키는 실행 파일 내의 명령어인 Code가 Compile되면 Compile된 소스코드가 저장되는 영역

 



2. DATA(변수/초기화된 데이터가 저장되는 공간)
변수 선언 - 변수를 선언한다는 것은
메모리에 특정 공간을 만들어서 변수가 그 주소를 가리키게 하고 데이터를 넣기도 하고 가져오기도 한다는 의미
그 특정 공간을 DATA영역에 넣어놓음

Code 전체를 complie하게 되면 변수가 어떤 것들이 선언되어야 하는지를 DATA영역에 만들어놓는다.

DATA영역은 BSS, DATA 두 가지로 분리된다.
BSS - 초기화되지 않은, 초기값이 없는 전역 변수, 선언만 했으니 초기값이 없음. 

DATA - 초기값이 있는 전역 변수 

 

 

 


3. STACK  * 중요한 역할

 

  프로그램이 자동으로 사용하는 임시 메모리의 영역으로 함수 내 로컬(지역)변수, 매개변수, 리턴 값 등이 잠시 사용되      었다가 사라지는 데이터를 저장하는 영역.

  함수 호출 시 생성되고 함수가 끝나면 반환됨.

  Code안에서 함수를 여러번 실행 할 수 있고 그때마다 인자도 다르게 넣어줄 수 있고, 함수안에도 별도의 변수를 지정    할 수 있죠(단, 이 변수는 함수가 끝나면 사라짐)
  함수는 여러 번 실행 될 수 있고, 동적으로 계속 처리해야 하는 필요성이 생김

함수가 끝나면 다음 실행될 영역을 가져가게 된다.
Return address 다음에 실행할 주소 저장하는 곳

Return address가 있는 이유는 함수 내에 함수가 존재하는 경우도 있으므로 그런 경우에 Return address를 지정하여

다시 돌아가 작업이 이어지도록 하기 위함이다.
Return address 값을 STACK에 저장 → 인자들을 STACK에 저장 → Code가 실행되면 작업을 진행하고 그 작업한 것들을 공란으로 만들어준 다음 Return address 주소의 다음 Code를 실행한다.

스택, 스택 프레임이란건 자료구조고 함수를 실행할 수 있는 구조를 만든 것



4. HEAP(코드를 동적으로 만들어주는 데이터)
동적으로 생성되는 메모리(필요한 공간)를 넣어두는 곳, 동적으로 메모리를 할당한다.

- 동적으로 메모리를 할당하는 C언어 코드

#include <stdio.h>
#include <stdlib.h>

int main()
{
      int *data;                                    #정수형 포인터 변수 - DATA 공간에 넣을 수 있음
      data = (int *) malloc(sizeof(int));       #HEAP 공간에 생성되는 메모리 - malloc - 이 함수가 바로 동적으로 메모리                                                         를 생성하는 함수, int 라는 정수 타잎의 sizeof 인자('32bit') - 이 주소값이                                                              STACK의 data값에 들어가서 주소가 나온다!
          *data = 1;                                #공간에 1을 넣어라 
          printf("%d\n", *data);                 # 정수로 표현해라
          retrun 0;
}

- HEAP이라는 별도의 공간을 두어서 동적으로 생성되는 메모리를 넣는 것!




#프로세스와 컴퓨터 구조

CPU : PC, SP 같은 레지스터들
PC(Program Conunter, 코드를 한줄 한줄 가리키는 주소 레지스터) 
+ SP(Stack Pointer, 스택 프레임 최상단 주소를 가리키는 레지스터)

레지스터는 프로세스와 크게 연관되어 있다.
EAX 레지스터 : 결과값 확인
EBP 레지스터 : 스택 진행 중에 문제가 생기면 진행되었던 함수가 호출된 스택 최상단 포인터 저장값을 갖고 있음,
함수가 문제가 생겼을 때 어떤 부분이 문제였는지를 Tracking하기 위한 레지스터


#스택 오버플로우
해킹 기법, 주로 해커들의 공격에 활용되었음



'코딩 > Basic' 카테고리의 다른 글

04. Thread의 이해  (0) 2020.12.18
01. 프로세스와 스케쥴러 4  (0) 2020.12.14
01. 프로세스와 스케쥴러 2  (0) 2020.12.10
01. 프로세스와 스케쥴러 1  (0) 2020.12.10
Operation System - OS.운영체제 2  (0) 2020.12.09