취업 준비/운영체제

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

openingsound 2020. 12. 30. 19:53

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

프로세스 구조

  • STACK
    • 임시 데이터(함수 호출, 로컬 변수등)
    • Return Address를 STACK에 저장하고 함수에서 필요한 공간을 할당한 뒤 나중에 다시 지운다.
    • EBP 레지스터
      • 현재 STACK의 최상단을 가리키는 주소가 들어가 있다.
      • 함수가 함수를 부르다가 문제가 생기면 어떤 시점에 어떤 함수를 실행 시키다가 문제가 생긴지 알기 어려우므로 존재한다.
    • EAX 레지스터
      • Return 값을 가지고 있다.
  • HEAP
    • c언어의 malloc()과 같이 동적으로 특정 공간 할당
    • Python은 생각하지 않아도 됨;;
  • DATA
    • 변수/초기화된 데이터
    • CODE에 필요한 저장공간
    • 공간의 크기가 정해져 있다.
    • BSS
      • 초기화 되지 않은 전역 변수
    • DATA
      • 초기값이 있는 전역 변수
  • CODE(text)
    • 컴파일된 소스코드가 저장된다.
    • 함수선언
      • STACK에 공간 사용해아 한다.
    • 변수선언
      • 메모리에 공간을 만들어야 한다.(DATA)

스택 오버 플로우

  • Stack에 할당된 공간보다 더 뒤의 공간에 접근을 해서 return address의 값이 변경 되게 되어서 내가 원하지 않는 코드가 실행 될 수 있다. (해킹)
  • 1
    2
    3
    4
    5
    6
    7
    8
    void copy(char *bar){
    char data[6];
    strcpy(data,bar);
    }
     
    int main (int argc,char **argv){// argv의 크기가 6보다 크면 STACK영역에서 복사를 할때 
    bar의 값을 data에 넣는데 data의 end영역과 return address값에 이상한값이 들어가게 된다. 
    copy(argv[1]);
    }
    cs

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

  • 원리
    • 프로세스 A가 실행중이다가 스케쥴러가 프로세스 B로 바꿔 주는데 이 바꿔주는걸 컨텍스트 스위칭 이라고 한다.
    • 매우 많이 일어나기 떄문에 어셈블리어로 작성되어 있다. (10ms단위로 바뀐다 → 매우 짧은 시간안에 바뀌어야 한다. )
    • PC(Program Counter) + SP(Stack Pointer)
      • PC
        • 지금 Program에서 어디를 보고 있는지
      • SP
        • Stack Pointer에서 다음에 어디를 봐야 하는지
    • PCB(Process Control Block)
      • 프로세스를 running하다가 ready나 block가 되면 PCB에 PC와 SP를 저장 해 둔다.
      • 나중에 다시 running하더라도 이전 상태를 이어서 작업 할 수 있다.
      1. Process ID
      2. Register 값(PC, SP등)
      3. Scheduling info(Process State) : Ready, Block, Running
      4. Memory Info(메모리 사이즈 limit)
      5. 우선순위
      • 즉 프로세스가 실행중인 상태를 캡쳐/구조화 해서 저장하고 있다.
  1. 현재 프로세스의 PC/SP 를 PCB에 저장한다.(메인메모리)
  2. 실행할 프로세스의 PCB정보를 메인메모리에서 로드한다.
    • 디스패치(dispatch)
      • ready상태의 프로세스를 running상태로 바꾸는 것
  3. 실행한다.

쉬어가기

  • 컴파일러
    • 초기 컴퓨터 프로그램들은 어셈블리어로 작성
      • 서로 다른 CPU아키텍쳐가 등장할 떄마다 매번 똑같은 프로그램 작성(최적화지만 이식성이 떨어짐)
      • 어셈블리어로는 프로그램 작성 속도가 매우 떨어짐(작업 속도)
      • 리눅스의 경우 CPU별로 컨텍스트 스위칭 코드가 존재한다. ㄷㄷ
    • 컴파일러 두두등장
      • CPU아키텍처에 따라서는 컴파일러 프로그램만 만들면되고 , 기존 코드는 수정할필요가 없다.(이식성 증가)
      • 어셈블리어로 작성한 코드보다는 작동 속도가 떨어 질 수 있다.

'취업 준비 > 운영체제' 카테고리의 다른 글

프로세스간 커뮤니케이션(IPC)  (0) 2020.12.30
인터럽트  (0) 2020.12.30
프로세스 상태와 스케쥴링  (0) 2020.12.30
스케쥴링 알고리즘  (2) 2020.12.30
프로세스 스케쥴링 기초  (0) 2020.12.24