728x90
Process

Process

  • Batch system의 Job / 시분할 시스템의 task, program
  • Process : 실행 중인 프로그램
    • 실제 코드 (text section)
    • program counter : 현재 상태 추적
    • 데이터 저장 및 함수 호출을 위한 메모리 스택, 힙
  • OS의 system call로 프로세스의 생성/삭제 구현
  • 메모리 상의 프로세스 할당
    • 시작 위치에는 text 저장(작성된 코드)
    • 그 위에 data(const, global 변수)
    • 그 위에 heap(malloc 등의 동적 할당)
    • stack : 지역 변수 / 함수 call
    • text, data, heap은 주소값이 작은 > 큰 쪽으로 할당
    • 스택의 경우 주소값이 큰 > 작은 쪽으로 할당
  • 프로세스 상태
    • new : 프로세스 생성
    • running : 명령 실행
    • waiting : 특정 이벤트 전까지 대기
    • ready : 프로세서에 할당되기 전의 대기 상태
    • terminated : 프로세스 삭제

  • Process Control Block(PCB)
    • task control block이라고도 함
    • 각 프로세스에 대한 정보 저장
      • 프로세스 상태
      • program counter : 다음 명령어의 위치
      • 프로세스의 우선 순위
      • 메모리 정보
      • 사용된 CPU, 클락 등의 정보
      • 프로세스에 할당된 I/O, 파일 정보
    • process간의 교환 : Interrupt 혹은 System Call로 이루어짐

  • Threads
    • 한 프로세스당 여러 개의 program counter 할당
    • 스레드 정보를 저장 가능한 공간 필요
      • ex. linux task_struct
    pid t_pid; /* process identifier */ long state; /* state of the process */ unsigned int time_slice /* scheduling information */ struct task_struct *parent; /* this process’s parent */ struct list_head children; /* this process’s children */ struct files_struct *files; /* list of open files */ struct mm_struct *mm; /* address space of this process */

Process Scheduling

  • CPU 활용을 최대한으로 하는 것이 목적
  • Queue 자료구조를 이용하여 관리
    • Job queue : 시스템 내 모든 프로세스
    • ready queue : ready / waiting 상태의 프로세스
    • device queue
      • 각 장치별로 queue head 존재
      • 프로세스가 device 사용 요청 시 해당 queue에 PCB가 연결
  • 프로세스의 동작 순서
    • 생성된 프로세스는 ready queue로 할당
    • 동작하는 프로세스는 CPU로 이동
    • I/O request 시 > I/O queue 할당 후 I/O 접근
    • time slice expire > ready queue 할당 후 CPU 할당
    • child fork / interrupt > 작업 후 ready queue 할당
  • scheduler
    • 프로세스가 I/O를 많이 쓰는지, CPU를 많이 쓰는지를 판단(I/O bound, CPU bound)
    • short term(CPU scheduler)
      • 현재 프로세스 바로 다음에 할당할 프로세스 선택
    • Long term(job scheduler)
      • 데이터센터 등 대형 시스템에서 사용
      • 다수의 작업을 모아서 한번에 효율적으로 처리
  • Context Switch
    • 프로세스 상태를 저장하고 새 프로세스로 전환
    • 상태를 저장 - 불러오고 새로 실행하는 과정의 overhead가 매우 큼
      • 파일 입/출력을 많이 하는 프로그램이 느린 이유

Operations on Process

  • Process Create
    • 부모 프로세스는 자식 프로세스를 생성
      • 트리 자료구조를 형성
      • 부모 프로세스는 자식 프로세스의 관리 가능(권한, 공유 등)
      • 부모-자식 프로세스의 동시 동작시 대기 혹은 병렬 처리 가능
    • 새 프로세스 생성 시, 부모 프로세스를 복사 후 프로그램 실행
      • UNIX의 프로세스 생성 명령어 - fork()
      • 자식 프로그램은 exec()명령어로 프로그램 실행
      • 부모 프로세스 wait : 자식 프로세스가 종료할 때까지 대기
  • Process Terminate
    • 완료 시 exit 후 상태 데이터를 반환
    • 자원을 과도하게 사용하는 등 프로세스 종료가 필요할 경우 abort()도 가능
    • cascading termination : 부모 프로세스가 먼저 종료시 하위 프로세스도 종료
    • 자식 프로세스가 사라져도 자원 회수 등을 위해 PCB는 여전히 존재
      • 부모 프로세스는 wait()으로 exit될 때까지 대기해야 함
      • wait 없이 프로세스 종료 시 : Zombie Process
      • wait 없이 부모 프로세스 종료 시 : Orphan Process

interprocess communication

  • 프로세스 간의 정보 교환
  • 교환 모델
    • message passing : 커널에서 제공하는 메세지 큐를 이용한 정보 교환
    • shared memory : 프로세스 간 공유 공간 할당
    • Producer-Consumer Problem
      • 데이터의 생산자(Producer)와 소비자(Consumer) 관계
      • 버퍼를 한정할지(bound), 안할지(unbound)의 문제
  • Shared memory
    • 통신하고자 하는 프로세스 간에 공유하는 메모리
    • OS가 아닌 사용자 level에서 통신 조절
    • 같은 메모리에 다른 프로세스가 동시에 조작 시 문제 존재
    • 프로그래밍이 어려우나
  • Message Passing
    • send / receive를 이용하여 프로세스 간에 데이터 전송
    • 프로세스 간의 링크 설정 필요
    • 2개 이상의 프로세스 연결 / 통신 방향(단방향, 쌍방향) 등을 고려

  • direct Communication
    • 데이터를 받을 프로세스 명시 send/receive(process, message)
    • pid가 바뀔 경우 접근 불가
  • Indirect Communication
    • mailbox(port)를 이용한 데이터 공유
    • 같은 process 연결에서 여러 개의 link 형성 가능
    • mailbox 생성 > 데이터 교환 > mailbox 삭제 과정으로 진행

  • Synchronization
    • Blocking : 데이터 송신 / 수신 중 한쪽이 끝날때까지 다른쪽은 불가
    • non-blocking : 송/수신에 제한 x, 오류 방지를 위해 데이터가 없는 경우 return 등으로 다른 행동을 하기 위한 별도 조치 필요
  • Buffering : 링크 사이의 메세지 큐
    • zero cap. : 큐 용량 x, 송/수신 중 하나가 끝나야 함
    • bound cap. : 정해진 용량, 큐가 모두 차면 대기
    • unbound cap. : 중단 없이 전송 가능

IPC system

  • POSIX
    • 통신할 각 process 내에 shared memory 생성
    • map 된 메모리에 메세지 작성(sprintf)
    • 받는 쪽은 해당 주소에서 데이터를 읽어옴
  • Windows
    • LPC(local procedure cell) : 일종의 mailbox
    • client - server 사이에 connect port(연결 요청)
    • client/communication port(일종의 양방향 통신, message passing)
    • shared section object(공유 메모리 역할)
  • Remote Procedure Call
    • 상대방 프로세스로 특정 동작을 요청
    • Stub : 두 프로세스 사이에 서로 다른 parameter, return 규칙을 알맞게 변환
    • Matcmaker : 프로세스 연결을 위한 Port 지정
  • Pipe
    • 부모 - 자식 프로세스 간의 데이터 교환
    • pipe라는 파일 객체로 데이터 관리
    • fd[0] : write / fd[1] : read
    • named pipe : 부모-자식 관계와 무관하게 통신
728x90

+ Recent posts