View

프로세스 구조

  • 컴파일 : 0과 1로 된 기계언어로 변환 되는 것.(바이너리라고도 부름)
  • CODE : 프로그램 코드가 컴파일된 언어로 저장되는 영역
  • DATA : 프로그램 내에 선언된 변수의 값을 저장
  • STACK : 함수가 실행 이후의 동작에 대한 주소인 return address값을 동적으로 저장-> 첫번째인자 저장 -> 두번째 인자 저장 -> 두번째 데이터 삭제 -> 첫번째 데이터 삭제 -> return address 삭제 -> 해당 함수 다음의 코드 실행
  • HEAP : 대표 적으로 molloc()이라는 함수가 있다. 특정 메모리 공간을 동적으로 생성하게 되는데, 이처럼 HEAP은 별도로 사용할 공간을 만드는 곳이다.

코드 예시 보기

  • void meaningless는 단수 함수 선언.
  • stack 자료구조의 원리로 작동.
  • 함수 실행 순서 : main() -> meaningless() -> return 0;
  • Stack : return address : 0006h -> argc -> argv -> return address : 0005h -> data = 1 => temp = 1
    실행이 끝나면, 데이터들을 순차적으로 없앤다.
  • temp = 1 -> data = 1 -> return address : 0005h(PC의 값을 0005h로 변환) -> argv -> argc -> return address : 0006h(PC의 값을 0006h로 변환) -> 프로그램 종료

프로세스와 컨텍스트 스위칭

  • 컨텍스트 스위칭 : 프로세스 A->B로 바꿔주는 매커니즘을 지칭
  • 프로세스(process)는 일반적으로 어떻게 구성되어 있을까?
    • text(CODE):코드
    • data : 변수/초기화된 데이터
    • stack : 임시 데이터(함수 호출, 로컬 변수 등) (=스택 프레임)
    • heap : 코드에서 동적으로 만들어지는 데이터

프로세스와 컴퓨터 구조

  • PC(Program Counter) + SP(Stack Pointer)
  • Program이 실행되면, CODE가 아래서부터 쌓이면서 실행된다.
  • EBP 레지스터 : 항상 스택의 최상위 값을 저장한다. 프로그램에 문제가 있을 때, 어느 함수에서 문제가 생겼는지를 빠르게 트레킹 하기위해 제공한다.
  • EAX : 함수의 return 값을 저장.

Share Link
reply
«   2024/10   »
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 29 30 31