티스토리 뷰

프로세스 구조 개요

프로세스(process)는 일반적으로 어떻게 구성되어 있을까?


Text(CODE)

프로그램의 코드

 

Data

  • 변수 / 초기화된 데이터
  • BSS Segment / Data Segement 로 분리된다.

    • BSS
      • 초기화되지 않은 Global, Static 변수
    • Data
      • 초기화 된 Global, Static 변수

Stack

  • 임시 데이터(함수 호출, 로컬변수 등)

Heap

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

출처: https://www.drdobbs.com/security/anatomy-of-a-stack-smashing-attack-and-h/240001832?pgno=1

PCB

  • Process Control Block(PCB), Process Context Block(PCB) 이라고 함
  • 프로세스가 실행중인 상태를 캡쳐/구조화해서 저장한다.
  • 저장되어 있는 것들
    • PC(Program Counter) + SP(Stack Pointer)을 저장한다.
    • Process ID
    • Register 값(PC, SP 등)
    • Scheduling Info(Process State)
    • Memory Info(메모리 사이즈 limit)

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

  • Context Switching (문맥 교환)
    • CPU에 실행할 프로세스를 교체하는 기술
  • 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서, 메인 메모리에 저장
  • 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB 정보(PC, SP)를 CPU의 레지스터에 넣고 실행
    • Dispatch(디스패치)
      • Ready 상태의 프로세스를 Running 상태로 바꾸는 것
  • 컨텍스트 스위칭 시간은 실제로 굉장히 짧은 시간(ms)단위로, 프로세스 스위칭이 일어난다.
  • 컨텍스트 스위칭 시간을 짧게 하기 위해서 C 코드가 아닌 에셈블리어 코드로 작성한다.
    • 어셈블리어로 작성했기 때문에, 리눅스의 경우 컨텍스트 스위칭 코드는 각 CPU마다 별도로 존재한다.

레코트판 처럼: https://www.youtube.com/watch?v=vvNqDRLYN64&feature=youtu.be

컴파일러

  • 초기 컴퓨터 프로그램들은 어셈블리어로 작성
    • 서로 다른 CPU 아키텍처가 등장할 때마다 매번 똑같은 프로그램 작성
    • 어셈블리어로는 프로그램 작성 속도가 매우 떨어진다.
  • 컴파일러 등장
    • CPU 아키텍처에 따라 컴파일러 프로그램을 만들면 된다. 기존 코드는 재작성할 필요가 없다.
    • 그러나, 어셈블리어로 작성한 코드보다 속도가 떨어질 수 있다.
패스트캠프 강의를 듣고 정리했습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
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
글 보관함