728x90
운영체제(OS, Operating System)
시스템 하드웨어 관리와 응용 소프트웨어를 실행하기 위한 하드웨어 추상화 플랫폼과 공통 시스템 서비스를 제공하는 시스템 소프트웨어
> 한정된 자원으로 효율적인 일처리를 하도록 편하게 도와주는 소프트웨어
사용 목적
- 편리성
- CUI
- GUI
- 효율성
- 시스템 보호
- 프로세스와 쓰레드 관리
구조
커널(Kernel)
- 운영체제의 핵심으로 메모리에 상주하여 가장 빈번하게 사용되는 기능 담당
- 프로세스, 메모리 관리 등
- 핵, 관리자 프로그램, 상주 프로그램, 제어 프로그램이라고도 함
시분할 시스템(Time Sharing System)
- 여러 사용자가 시스템 및 가상 메모리 관리
- 사용자 지향적(User-oriented)
장점
- 응답시간 단축
- 생산성 향상, 프로세서 유휴 시간 감소
단점
- 통신 비용 증가
- 통신으로 인한 보안 문제 발생
- 개인 사용자 관점 체감 속도 저하
- 동시성(Concurrency) : 프로세스 A, B가 5분씩 10분 작업하는 경우
- 유사성/병행성(Parallelism) : 프로세스 A, B가 5분씩 5분 작업하는 경우 ex) 듀얼코어, 쿼드코어
프로세스(Process)
- 실행 중인 프로그램
- 프로그램에 CPU에 올라가야 프로세스!
- 실행을 위해 시스템(커널)에 등록된 작업
- 각종 자원들을 요청하고 할당 받는 개체
- 능동적인 개체(Active Entity)
- CPU를 공유하는 여러 작업 간의 구분을 위한 단위
- 각 프로세스는 컴퓨터 시스템을 독점 사용하는 것으로 인식
프로세스 메모리
- code
- 소스코드
- data
- 프로그램이 종료될 때까지 살아있는 변수 ex) static 변수, 전역변수
- heap
- 동적으로 저장되는 변수
- free store
- 여유 공간
- stack
- 지역변수
> heap과 stack은 크기가 동적인 변수가 저장됨
> stack overflow 에러 : 최대치의 stack이 heap의 영역을 침범, heap의 데이터 소설 가능성
> heap overflow 에러
프로세스 상태
- 시작(New/Created)
- 프로세스가 시작되어 그 프로세스를 위한 각종 자료구조는 생성되었지만, 아직 메모리 획득을 승인받지 못한 상태
- 준비(Ready)
- 프로세스가 CPU를 보유하면 당장 명령을 실행할 수 있지만, CPU를 할당받지 못한 상태.
- 실행(Running)
- 프로세스가 CPU를 보유하고 있고, 기계어 명령을 실행 중인 상태
- 대기(Waiting, Blocked, Sleep)
- 프로세스에게 CPU를 주어도 당장 명령을 실행할 수 없는 상태
- 실행될 작업 없이 대기하는 경우
- 완료(Terminated)
- 프로세스가 종료되었지만, 운영체제가 그 프로세스와 관련된 자료구조를 완전히 정리되지 못한 상태
Interrupt(인터럽트)
- 예상치 못한 외부에서 발생한 이벤트
- I/O, Clock, Console. Program check, Machine check, Inter-process, System call 등
- 인터럽트 발생 시 CPU의 제어권이 운영체제로 넘어감, 그러면 운영체제는 인터럽트 처리 루틴으로 수행 중이던 프로세스의 문맥을 저장하고 준비 상태에 있는 프로세스 중 새롭게 CPU 제어권을 넘길 프로세스를 선택함
Context Switching(문맥 교환)
- 실행 시킬 프로세스를 변경하기 위해 원래 수행중이던 프로세스 문맥을 저장하고 새로운 프로세스의 문맥을 세팅하는 과정
- Context: 프로세스와 관련된 정보들의 집합
- CPU가 여러 프로세스를 처리할 때, 기존에 작업하던 프로세스의 정보(Register Context)를 저장하고(Context saving), 새로 처리할 프로세스의 정보(Register Context)를 불러오는 것(Context restoring)
- 기본적으로 overhead(비용)가 발생
- 운영체제마다 다르며 성능에 큰 영향
- Thread 등을 사용하여 불필요한 context switching을 줄여야 함
> 시분할 시스템에서 A > B 프로세스로 바뀌는 것
> A > B로 넘어갈 때 A의 내용을 저장해야 함, 저장공간=PCB
프로세스 관리 블록(PCB, Process Control Block)
- 운영체제가 프로세스 관리에 필요한 정보 저장
- PID(Process Identification Number)
- 스케줄링 정보
- 프로세스 상태
- 메모리 관리 정보
- 입출력 상태 정보
- 문맥저장 영역
- 계정 정보
- 프로세스 생성시 생성 됨
- 각 프로세스들의 상태 정보 저장
프로세스(Process)와 스레드(Thread)
프로세스
- 어떠한 목적을 위해 연산을 하는 과정
- 자원을 할당받고 그 자원을 제어
스레드
- 프로세스가 돌아가는 과정 중 제어 부분 의미
- 하나의 프로세스에 여러 개의 스레드 존재 가능
- 스레드는 프로세스와 다르게 하나의 자원을 여러 스레드가 공유 가능
포크(fork)
- 프로세스가 자기 자신을 복제하는 동작(자식 프로세스 생성)
- 시스템 호출의 일종으로 커널 안에서 구현됨
- 유닉스 계열 운영체제에서 프로세스를 만드는 주된 방식
fork vs vfork
- fork
- 부모 프로세스의 메모리, 파일 기술자 테이블 등 모두 복사하여 프로세스 구성
- 자원을 복사하는 오랜 시간 소요
- vfork
- fork 오랜 시간이 소요되는 단점을 극복하기 위해 만들어진 대안
- 부모 프로세스의 자원을 복사하는 것이 아닌 자원 공유
좀비 프로세스 vs 자식 프로세스
- 좀비 프로세스
- 자식 프로세스가 부모 프로세스 보다 먼저 종료되는 경우
- 자식 프로세스가 exit 시스템 콜을 호출 하면서 종료, 관련 모든 메모리와 리소스가 해제되면서 다른 프로세스에서 사용 가능하게 됨
- 자식 프로세스가 종료된 후 부모 프로세스가 자식 프로세스의 상태를 알고 싶은 경우가 있기 때문에 커널은 자식 프로세스가 종료되더라도 최소한의 정보(프로세스 ID, 프로제스 종료 상태 등)를 가지고 있게 되는됨
- 부모 프로세스가 좀비 프로세스의 종료 상태를 회수(wait 시스템 콜 호출을 통해)하게 되면 좀비 프로세스는 제거됨
- 좀비 프로세스가 쌓이게 되면 리소스의 유출을 야기
- 자식 프로세스가 부모 프로세스 보다 먼저 종료되는 경우
- 자식 프로세스
- 부모 프로세스가 자식 프로세스보다 먼저 종료되는 경우, init 프로세스가 자식 프로세스의 새로운 부모 프로세스가 됨
- 종료되는 프로세스가 발생할 때 커널은 이 프로세스가 누구의 부모 프로세스인지 확인한 후, 커널이 자식 프로세스의 부모 프로세스 ID를 1(init 프로세스)로 바꿔 줌
참고 및 출처)
프로세스 관리-01
프로세스의 개념 실행중인 프로그램 : program in execution디스크에 존재하던 프로그램이 메모리에 적재됨.프로그램이 CPU를 할당받아서 기계명령(instruction)을 수행하고 있는 상태. 일반적으로 JOB이
eunhyejung.github.io
728x90
반응형