2021-9-26 운영체제 (3주차)

프로그램의 실행

image

  • 프로세스마다 가상 메모리 주소가 있다
  • 논리적 메모리 주소와 물리적 주소가 다르기에 Address translation 주소 변환이 필요하다.
  • 메모리 데이터를 써야할 때 - data영역에 위치
  • virtual memory는 코드 데이터 스택으로 구성되어있다

image

  • 운영체제의 IO 등 위한 시스템콜 코드, 인터럽트 처리코드가 코드영역에 있음
  • data영역에는 모든 하드웨어들을 관리하기 위한 자료구조를 가지고 있음, 실행중인 모든 프로세스를 관리하기 위한 자료구조(ProcessControlBloc?)를 가지고 있다.
  • 운영체제의 stack - 각 프로세스마다 별도로 있다
  • 프로그램 A가 실행되다가 운영체제 호출 - A의 커널 스택을 사용

함수

  • 사용자 정의 함수
    • 자신의 프로그램에서 정의한 함수
  • 라이브러리 함수
    • 자신의 프로그램에서 정의하지 않고 갖다 쓴 함수
    • 자신의 프로램의 실행 파일에 포함되어 있다.
  • 커널 함수
    • 운영체제 프로그램의 함수 - 커널 코드에 들어있다
    • 커널 함수의 호출 = 시스템 콜

image

  • 내가 정의한 함수나 라이브러리 - user mode 에서 실행
  • System call을 부르면 커널모드로 바껴서 호출

프로세스

  • 실행중인 프로그램

  • 프로세스의 문맥(context) - 프로세스의 현재 상태를 나타내는 정보들

    • CPU 수행 상태를 나타내는 하드웨어 문맥
      • Program Counter - 어디를 실행하고 있는지
      • 각종 register - 레지스터에 어떤값을 넣고 있었는지
    • 프로세스의 주소 공간
      • code, data, stack - 함수를 몇개를 호출했고 어디를 나타내고있는지…..
    • 프로세스 관련 커널 자료 구조
      • PCB - 각각의 프로세스를 운영체제가 관리하면서 가지고 있는것
      • Kernel stack - 프로세스마다 별도의 커널을 쓰기에 - 프로세스의 현재상태의 정보를 가짐

프로세스의 상태

  • Running - CPU를 잡고있는 상태
  • Ready - CPU를 기다리고 있는 상태
  • Blocked - CPU를 주어도 당장 instruction을 수행할 수 없는 상태 - ex) 디스크에서 file 을 읽어와야 하는 경우, Process 자신이 요청한 event가 즉시 만족되지 않아 이를 기다리는 상태

  • Suspended (stopped)
    • 외부적인 이유로 프로세스의 수행이 정지된 상태
    • 프로세스는 통째로 디스크에 swap out 된다
    • ex) 사용자가 프로그램을 일시 정지시킨 경우, 메모리에 너무 많은 프로세스가 올라와있어서 프로세스를 중단시킬때

Process Control Block (PCB)

  • OS가 관리상 사용하는 정보
    • Process state, Process ID
    • scheduling infomation - 우선순위, priority
  • CPU 수행 관련 하드웨어 값
    • Program counter, register
  • 메모리 관련
    • Code, data, stack의 위치 정보
  • 파일 관련
    • Open file descriptors

문맥교환 context switch

  • CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
  • CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
    • CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
    • CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴

스케줄러 (Scheduler)

운영체제 안의 코드 중 일부

  • Long-term scheduler(장기 스케줄러 or job scheduler)
    • 프로세스에 memory를 주는 문제
    • degree of Multiprogramming을 제어 - 메모리에 올라간 프로그램이 몇개냐 를 관리
    • time sharing system 에는 보통 장기 스케줄러가 없음
  • Short-term sheduler(단기 스케줄러 or CPU scheduler)
    • 어떤 프로세스를 다음번에 runnung 시킬지 결정
    • 프로세스에 CPU를 주는 문제
    • 충분히 빨라야함
  • Midiun-term Scheduler(중기 스케줄러 or Swapper)
    • 여유공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
    • degree of Multiprogramming을 제어

Thread 쓰레드

  • Thread 의 구성
    • Program counter
    • register set
    • stack space
  • Thread 가 동료 Thread와 공유하는 부분( = task)
    • code section
    • data section
    • OS resources
  • 다중 스레드로 구성된 태스크 구조에서는 하나의 서버 스레드가 blocked 상태인 동안에도 동일한 태스크 내의 다른 스레드가 실행되어 빠른 처리를 할 수 있다.
  • 동일한 일을 수행하는 다중 스레드가 협력하여 높은 처리율과 성능 향상을 얻을 수 있다
  • 스레드를 사용하면 병렬성을 높일 수 있다.

쓰레드의 장점

  • 빠른 응답성
  • 자원 공유의 효율성 - 동일 프로세스 안의 쓰레드는 서로 공유하기에
  • 쓰레드 하나 만드는게 프로세스 하나 만드는것보다 효율적이다, 시간차이 많이난다함

프로세스 생성 (Process Creation)

  • 부모 프로세스가 자식 프로세스를 생성 - fork() 라는 시스템콜을 통해서
  • 프로세스의 트리(계층 구조) 형성
  • 프로세스는 자원을 필요로 함 - 운영체제로부터 받는다, 부모와 공유한다
  • 자원의 공유

  • 주소공간
    • 자식은 부모의 공간을 복사함
    • 자식은 그 공간에 새로운 프로그램을 올림

프로세스 종료

  • 프로세스가 마지막 명령을 수행한 수 운영체제에게 이를 알려줌(exit)
    • 자식이 부모에게 output data를 보냄
    • 프로세스의 각종 자원들이 운영체제에게 반납됨
  • 부모 프로세스가 자식의 수행을 종료시킴(abort)
    • 자식이 할당 자원의 한계치를 넘어설때
    • 자식에게 할당된 태스크가 더 이상 필요하지 않음
    • 부모가 종료(exit)하는 경우
Written on September 26, 2021