일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- mmap
- 섭페
- pane & desktop
- atexit()
- 생활코딩 복습
- bash shell 반복문
- copy-on-write
- 3Ds max 기초
- exec 시스템 콜
- background process
- Standard Stream
- Symmetry
- Redirection
- bash shell 변수
- foreground process
- 개체 외곽 하이라이트 기준선 없애는 법
- 3D 배경 그래픽
- houdini
- exit()
- msync
- ps 명령어
- bg 명령어
- 뷰포트
- 후디니
- 섭페에서 텍스처 추출
- 추가 업로딩 중
- fork 시스템 콜
- substance painter
- wait 시스템 콜
- bash shell 조건문
- Today
- Total
Researcher to Developer
01. 프로세스와 스케쥴러 3 본문
#프로세스와 컨텍스트 스위칭
- 컨텍스트 스위칭
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 |