본문 바로가기
만도 ivs 3기 준비

만도 ivs 운영체제 공부 정리

by recoraddic 2024. 11. 24.

** Process **

1. 프로그램의 실행

원래 File system에서 실행파일로 존재하다가 그 프로그램이 메모리에 올라가면 프로세스가 된다

File System에 있던 실행파일들이 메모리에 올라가기전에 Virtual Memory를 가지게 된다 .Virtual Memory는 프로그램의 독자적인 주소로 구조는

  1. stack
  2. data
  3. code

이 된다. 이중에서 당장 필요한것은 메모리에 저장하고 당장 필요없는것은 Swap Area로 보낸다.

커널영역 즉 운영체제도 역시 프로그램이여서 같은 구조를 가지고 있다

커널의 구조

  •  code
    1. CPU에서 사용자 프로그램이 실행할 수 없는 특권명령 기계어를 운영체제가 대신해달라고 요청 ( 시스템 콜) -> 예를 들어 I/O는 사용자 프로그램이 disk에서 파일 읽어올 수 없어서 시스템 콜을 통해 운영체제에게 사용자 프로그램이 부탁
  • data
    1. 모든 프로세스를 관리하기 위한 PCB
    2. 모든 하드웨어를 관리하기 위한 자료구조
  • Stack
    1. 프로세스가 운영체제에게 서비스요청(시스템 콜)시 운영체제도 함수로 이루어졌기 때문에 결국 stack에 그 과정이 저장되는데 이때 운영체제 호출한 process이름의 커널 stack에 저장  

중요한건 stack에 운영체제가 얼마나 실행되었는지가 기록된다

프로세스의 정의 및 문맥

  • 정의 - 실행되고 있는 프로그램
  • 프로세스의 문맥 → 프로세스가 지금 어떤상태에 있나?
    1. CPU Context
      1. program counter : 이걸로 함수가 어디까지 실행되었는지 확인가능
      2. 각종 레지스터의 상태를 통해 현재 상태 확인 가능
    2. Process 주소공간
      1. stack을 보면 함수가 어디까지 실행되었고 몇개 실행되었는지 확인가능
      2. data를 보면 변수를 어떤것을 가지고 있는지 확인 가능
    3. process관련 커널 자료구조(위에 있는 그림의 PCB와 커널 스택)
      1. stack에 있는 각프로세스의 커널
      2. data에 있는 각 프로세스의 PCB

PCB와 문맥교환

 

위에서 계속 PCB가 나와서 지금으로는 알수 있는게 운영체제의 Virtual memory공간안에서 data계층안에 있는거다 정도만 알 수 있다

PCB는 운영체제가 프로세스를 관리하기 위한 자료구조이다

그림과 같이 4가지로 크게 나눌 수 있다

  1. 운영체제가 관리상 사용하는 정보
    1. 프로세스의 상태나 프로세스의 고유아이디 프로세스가 queue에서 기다릴때 어떤걸 먼저 순번으로 해줄지 이런거를 관리해주는 부분이다
  2. CPU 수행관련 하드웨어값
    1. cpu가 time-sharing이기때문에 cpu를 얻었다 뺏겼다 하는 과정에서 얼마나 수행되었는지 문맥의 저장을 하는 것이다 왜냐면 program counter는 생각해보면 지금 code에서 어디가 수행되고 있는지를 확인 할 수 있고 register는 레지스터가 어떤게 쓰이고 있는지 어떤게 저장되어있는지를 나타내기 때문에 꼭 중요한 정보이다 → 그리고 여기서 나오는게 →문맥교환이다
  3. 3.4번 메모리관련
  • 문맥교환이란 ??
  • 만약에 System call이 발생하면 무조건 문맥교환인가??

  1. 이 과정은 문맥교환이 아니다 중간에 kernel mode를 사용하기는 하지만 결국 다시 같은 프로세스를 쓰기 때문이다 하지만 이때 역시 PCB에 프로세스의 값이 저장은 되지만 그 부담은 문맥교환보다는 작다
  2. 2번은 프로세스가 바뀌기 때문에 문맥교환이 발생한것이다

 

프로세스의 상태

  1. Running
    1. cpu 1개에서  실행되고 있는 프로세스, 이 프로세스가 Running이다
  2. Ready
    1. 모든 준비를 다 끝내고 CPU을 쓰겠다고 Ready queue에서 기다리는 프로세서들
  3. Blocked
    1. CPU를 당장 얻어도 무의미한 프로세스 시간이 많이 필요한 과정을 하는 중인 프로세스들

그리고 Blocked → Ready 상태로 바꾸는 법

만약에 Blocked에서 Ready로 바꾸기위해서는 운영체제가 넘겨야하는데 지금 CPU를 다른 프로세스가 사용중이니 CPU를 운영체제가 장악하려면 interrupt가 필요
예를 들면 disk controller가 CPU에게 Interrupt를 걸고 CPU는 운영체제에게 넘어오고 CPU는 Blocked 상태의 프로세스를 Ready로 바꾼다

이거는 또 다른 느낌의 프로세스 상태인데 NEW와 Terminated이라는 상태 2개가 추가되었다

 

스케줄러

 

운영체제에서 스케줄링하는 코드를 의미한다 3가지가 있다

  1. Long -Term -scheduler
    1. 이 스케줄러는 new 프로세스가 ready프로세스가 되기 위해서는 admitted이 되어야하는데 이걸 해주는 스케줄러인데 요즘은 무조건 ready해주기때문에 사용하지 않는다
  2. short - term - scheduler →cpu schduler
    1. 어떤 프로세스를 다음번에 running시킬지 결정
    2. 프로세스에 cpu를 주는 문제
    3. 아주 빨라야한다
  3. Mid - Term - sceduler ( Swapper라고도 불린다)
    1. Long -Term -scheduler 대신에 사용된다
    2. 모든 프로세스가 메모리에 추가되면 메모리는 한정적인 하드웨어여서 문제가 생긴다
    3. 이때 프로세스 통쨰로 메모리에서 쫓아내는 것을 해주는 스케줄러이다
    그러면 여기서 메모리에서 쫓겨난 프로세스는 무슨상태일까?   --- > suspended 상태
    suspended상태는 외부적인 이유로 프로세스가 수행이 정지된 상태를 의미한다.
    즉 Suspened상태는 사용자나 Swapper가 다시 resume을 해줘야 Ready상태가 된다
    바로 suspended상태가 된다.

    여기서 잘 판단해야 할것이 Blocked상태suspened상태이다

    Blocked 상태로 어떠한 Event가 끝나기를 기다리는 상태이다. 정지상태(Inactive)가 아니다
    자신이 요청한 Event가 만족되면 Ready상태 로 바뀌며 일반적으로 I/O 작업으로System Call을 호출한 프로세스들이 Block 상태가 된다

이 그림은 프로세스의 상태도이다

여기서 주의해야할 게 3가지가 있다

  1. 프로세스 a가 유저모드에서 함수를 실행시키다 시스템콜을 통해 커널모드로 바뀌면 무슨 모드지?
    1. 이건 프로세스 a입장에서는 running모드이다
  2. 만약에 프로세스A가 진행중인데 disk controller에 의해서 interrupt가 들어왔다 그러면 CPU의 주도권은 운영체제가 가지게 된다 그리고 disk controller가 알려준 프로세스를 Blocked상태에서 Ready상태로 바꾸고 있다 이 상태에서 프로세스 A는 Runnig이라고 생각해야한다
  3. 아래를 보면 Suspended 상태 는 inavtive 라 하고 2가지로 나눈다.
    • Blocked 상태에서 Suspended
    • Ready 상태에서 Suspended
    inavtive 에서 active 가 되려면 외부에서 다시 메모리를 주어야 한다.Suspended Blocked 에서 Suspended Ready 로 가는 화살표(WakeUp)가 있는데즉 Blocked -> Suspended Blocked 된 후 I/O작업을 끝마쳤을 때
    Suspended Blocked -> Suspended Ready 로 변경된다.
    이는 프로세스 I/O 작업이 완료될 경우(중기스케줄러나 사용자가 메모리를 뺏어서 Inactive가 되었듯이

'만도 ivs 3기 준비' 카테고리의 다른 글

만도 ivs 3기 준비만도 ivs 운영체제 공부 정리  (0) 2024.11.24
만도 ivs 3기 준비  (2) 2024.11.24