Computer Science/유닉스프로그래밍

[유닉스 시스템 프로그래밍] Ch05. 프로세스 정보

계속지나가기 2020. 10. 19. 21:37
반응형

(본 강의 노트는 한빛 아카데미의 <유닉스 시스템 프로그래밍> 책을 기반으로 하고 있습니다)

Ch05. 프로세스 정보

학습목표

  • 유닉스 시스템에서 프로세스가 무엇인지 이해한다.
  • 함수를 사용해 프로세스의 속성을 검색할 수 있다.
  • 프로세스의 실행시간을 측정할 수 있다.
  • 환경변수를 설정하고 사용할 수 있다.

목차

  1. 프로세스의 정의
  2. 프로세스의 구조와 상태변화
  3. 프로세스 목록 보기
  4. 프로세스 식별 함수
  5. 프로세스 그룹 및 세션
  6. 프로세스 실행시간 측정
  7. 환경변수의 이해
  8. 환경변수의 사용

01. 프로세스의 정의

프로세스

: 실행중인 프로그램을 의미

  • 프로세서 : 중앙처리장치
  • 프로그램 : 사용자가 컴퓨터에 작업을 시키기 위한 명령어의 집합
  • 고급언어로 작성한 프로그램을 기계어 프로그램으로 변환해야 실행 가능

02. 프로세스의 구조와 상태 변화

프로세스의 구조

: 메모리에 적재된 프로세스의 구조

  • text : 실행 코드 저장
  • data : 전역 변수 저장
  • heap : 동적 메모리 할당을 위한 영역
  • stack : 지역변수를 저장하는 영역

프로세스 상태 변화

  • 프로세스의 상태는 규칙에 따라 여러 상태로 변함
    : 커널의 프로세스 관리 기능이 프로세스의 스케줄링 담당
  1. 프로세스는 먼저 사용자 모드에서 실행
  2. 사용자 모드에서 시스템 호출을 하면 커널 모드로 전환
  3. 수면 중이던 프로세스가 깨어나 실행 대기 상태로 전환되면 실행 준비
  4. 커널 모드에서 실행 중 입출력을 기다릴 때처럼 실행을 계속할 수 없으면 수면 상태로 전환

03. 프로세스 목록 보기

프로세스 목록 보기

  • 현재 실행중인 프로세스 목록을 보려면 PS 명령 사용
    : 전체 프로세스를 보려면 -ef 옵션 사용

  • 현재 실행 중인 프로세스를 주기적으로 확인
    : 공개소프트웨어 : top

04. 프로세스 식별 함수

프로세스 식별

  • PID 검색 : getpid( )
    : 이 함수를 호출한 프로셋의 PID를 리턴

  • PPID 검색 : getppid( )
    : 부모 프로세스의 PID를 리턴

05. 프로세스 그룹 및 세션

프로세스 그룹

  1. 프로세스 그룹
  • 관련 있는 프로세스를 묶은 것으로 프로세스 그룹ID가 부여됨
  • 작업 제어 기능을 제공하는 쉘은 명령을 파이프로 연결하여 프로세스 그룹 생성 가능
  1. 프로세스 그룹 리더
  • 프로세스 그룹을 구성하는 프로세스 중 하나가 그룹 리더가 됨
  • 프로세스 그룹 리더의 PID 가 PGID
  • 프로세스 그룹 리더는 변경 가능
  1. PGID : getpgrp(), getpgid()
  2. PGID 변경 : setpgid()

세션

  • POSIX 표준에서 제안한 개념
  • 사용자가 로그인해 작업하고 있는 터미널 단위로 프로세스 그룹을 묶은 것
  • 세션 검색 : getsid( )
    : 새로운 세션을 생성 시 해당 프로세스는 세션 리더가 되면 세션 리더의 PID가 세션ID
  • 세션 생성 : setsid( ))

06. 프로세스 실행 시간 측정

프로세스 실행 시간 측정

  • 프로세스 실행 시간의 구성 : 시스템 실행 시간 + 사용자 실행 시간
  1. 시스템 실행 시간 : 커널 코드를 수행한 시간
  2. 사용자 실행 시간 : 사용자 모드에서 프로세스를 실행한 시간
  • 프로세스 실행 시간 측정
  • 사용자 실행 시간과 시스템 실행시간으로 나누어 tms 구조체에 저장
  • 시간 단위는 클록틱
  • tms 구조체

07. 환경변수의 이해

환경변수

  • 프로세스가 실행되는 기본 환경을 설정하는 변수
  • 로그인 명, 쉘, 터미널에서 설정된 언어, 경로명 등
  • 현재 쉘의 환경 설정을 보려면 env 명령을 사용

08. 환경변수의 사용

환경변수의 사용

  • 전역변수 environ

  • main 함수 인자 사용

  • 환경 변수 검색 : getenv( )

  • 환경변수 설정 : putenv( )

  • 환경변수 설정 : setenv( )

    • envname : 환경변수명 지정
    • envval : 환경변수 값 지정
    • overwrite : 덮어쓰기 여부 지정, 0이 아닐 경우 덮어쓰고, 0이면 덮어쓰지 않음
  • 환경변수 설정 삭제 : unsetenv( )

반응형