[운영체제] 2. Processes

만두·2023년 11월 27일
0

운영체제

목록 보기
2/13

Virtualization

자원은 1개. 하지만 cpu만 사용하는건 아니기 때문에 여러 프로그램이 나눠쓸 수 있다.

예를 들어 다음과 같이 cpu1개가 프로그램 하나를 실행하는 상태이다.

Multiple Process는 다음과 같이 실행되는 것처럼 보이지만, 사실 cpu 1개로 나눠쓰는 거다.

이렇게 cpu가 간섭하면서 프로그램을 여러개 돌아가면서 cpu를 사용할 수 있게 한다.

관리를 더 쉽게 하기 위해 OS가 cpu를 뺏어서 다시 프로세스에게 전달해주는 식으로 동작한다.

즉, CPU를 time sharing을 한다.

이렇게 OS가 있기 때문에 각각의 프로세스가 자신만의 cpu를 가진 것같은 환상을 만들어준다.


Process

💡 A Process is a running program

프로세스는 실행중인 프로그램이다.

프로세스는 원래 disk에 있다가 memory에 적재한다.

  • Comprising of a process
    • Memory (address space)
      • Code(Text)
      • Data
      • Stack
      • Heap
    • Registers
      • Program counter
      • Stack pointer

Process API

  • 이 API들은 어떤 현대의 OS라도 이용 가능하다.
    • Create
      • 프로그램을 실행하는 새로운 프로새스를 생성한다.
    • Destroy
      • 실행중인 프로그램을 종료한다.
    • Wait
      • 실행을 멈추는 프로세스를 기다린다.
    • Miscellaneous Control
      • 프로세스를 중지하고 다시 재개하는 방법의 종류 중 하나.
    • Status
      • 프로세스에 대한 상태 정보를 얻는다.

Process Creation

  1. 프로그램 code를 메모리에서 Load한다. 프로세스의 주소 공간에다가.

    1. 프로그램은 초기에 실행가능한 형태로 disk에 저장된다.
    2. OS는 로딩중인 프로세스를 느리게 수행한다.
      1) 여기서 느리게라는 뜻은 통째로 들고오는게 아닌 필요한 부분 일부분만 가져오는 것을 뜻한다.
  2. 프로그램의 run-time stack이 할당된다.

    1. 지역 변수, 함수의 매개변수 그리고 반환 주소에 Stack을 사용한다.
    2. 인수 argc와 main 함수의 argv배열을 사용하여 stack을 초기화한다.
  3. 프로그램의 heap이 생성된다.

    1. 명시적으로 요청된 동적 할당 데이터에 사용된다.
    2. malloc()을 호출하여 해당 공간을 요청하고, free()를 호출하여 여유 공간을 확보한다.
  4. OS는 다른 초기화 업무를 수행한다.

    1. Input/output (I/O) 설정
      1) 각 프로세스에는 기본적으로 3개의 열린 file descriptor가 있다.
      2) Standard Input, Output and Error
  5. 프로그램은 main이라고 이름붙여진 entry point에서 실행이 시작된다.

    1. os는 cpu의 제어권을 새로 생성된 프로세스로 이전한다.

이렇게 disk에 있는 값들을 읽어서 process의 메모리 공간에 Load한다.


Process States

프로세스는 세 가지 상태 중 하나가 될 수 있다.

  • Running
    • 프로세스는 프로세서에서 실행 중인 상태이다.
  • Ready
    • 프로세스는 실행할 준비가 되어있지만 몇가지 이유에 의해 OS가 현재 프로세스를 실행하지 않기로 결정한 상태이다.
  • Blocked
    • 프로세스에서 일종의 작업을 수행했고, 디스크에 I/O 요청을 시작하면 이 요청이 차단되므로 다른 프로세스에서 프로세서를 사용할 수 있다.


Data structures

  • OS는 다양한 관련 정보를 추적하는 몇가지 주요 데이터 구조가 있다.
    • Process list
      • Ready processes
      • Blocked processes
      • Current running process
    • Register context

→ 프로세스 리스트를 만들어서 여기서 준비중인 프로세스, block된 프로세스, 현재 실행중인 프로세스를 파악 가능. 그리고 레지스터 문맥 교환도 가능

  • PCB (Process Control Block)
    • PCB는 각 프로세스에 대한 정보를 포함하는 C-structure가 있다.

Implementing Processes 프로세스 구현

  • PCB(Process Control Block) or Process Descriptor
    • 프로세스에 대한 모든 정보를 포함한다.
      • CPU 레지스터
      • PID, PPID, 프로세스 그룹, 우선순위, 프로세스 상태, 신호
      • CPU 스케줄링 정보
      • 메모리 관리 정보
      • 회계 정보
      • 파일관리 정보
      • 입출력 상태 정보
      • 자격 증명
  • task_struct in Linux
    • 리눅스 3..0 기준 3248 바이트 크기
// the registers xv6 will save and restore
// to stop and subsequently restart a process
struct context {
int eip; // Index pointer register
int esp; // Stack pointer register
int ebx; // Called the base register
int ecx; // Called the counter register
int edx; // Called the data register
int esi; // Source index register
int edi; // Destination index register
int ebp; // Stack base pointer register
};
// the different states a process can be in
enum proc_state { UNUSED, EMBRYO, SLEEPING,
RUNNABLE, RUNNING, ZOMBIE };

// the information xv6 tracks about each process
// including its register context and state
struct proc {
char *mem; // Start of process memory
uint sz; // Size of process memory
char *kstack; // Bottom of kernel stack

// for this process
enum proc_state state; // Process state
int pid; // Process ID
struct proc *parent; // Parent process
void *chan; // If non-zero, sleeping on chan
int killed; // If non-zero, have been killed
struct file *ofile[NOFILE]; // Open files
struct inode *cwd; // Current directory
struct context context; // Switch here to run process
struct trapframe *tf; // Trap frame for the
// current interrupt

};

Context Switch

cpu가 다른 프로세스로 교환될 때 시스템은 다음과 같은 일을 한다.

  • save the state of the old process
  • load the saved state for the new process

Context switch time은 순수 오버헤드이다.

  • 전환하는 동안 시스템은 유용하게 작동하지 않는다.

Context switch time은 하드웨어에 의존한다.

  • register set에 따라 다르다.

profile
아무것도 모르는 말하는 감자 입니다

0개의 댓글

관련 채용 정보