브래의 슬기로운 코딩 생활
운영체제 4주차 정리 본문
프로세스 관리
실습환경 구축
가상 머신(Virtual Machine)
- 게스트 운영체제의 동작 환경을 제공하는 가상의 하드웨어 환경을 제공
- 실습용 가상 머신 : VirtualBox
• 다운로드: https://www.virtualbox.org/
운영체제
- 리눅스 배포판을 통한 운영체제 기능을 실험
- 실습용 운영체제 : Debian Linux (버전: 11.5)
• 데이반 리눅스계열로 각종 해킹 관련 툴들이 포함된 리눅스 배포판
• 다운로드: https://www.debian.org/
실습을 위한 환경 설정
쉘 변경
• 명령어: chsh
프로세스 상태 제어 실습
실습 준비
가상머신: VirtualBox
운영체제: 데비안 리눅스(Debian Linux)
정지(휴식) 상태 실습
명령어: ps
• 프로세스들에 대한 상태정보를 표시
명령어: kill
• 지정한 프로세스에게 시그널을 전송
• 시그널 번호는 앞에 ‘-’문자를 붙임
• 시그널의 리스트는 ‘kill – l’명령을 통해 확인 가능
1. 두 개의 터미널 창 생성
2. 한 곳(A창)에서는 “sleep 1000” 명령 실행
3. 다른 창(B창)에서는 “ps f”명령을 통해 프로세스 상태 파악
4. B창에서 “kill -19 [sleep에 해당하는 PID]”를 입력
5. B창에서 “ps f”명령을 통해 프로세스 상태 다시 파악
6. B창에서 “kill -18 [sleep에 해당하는 PID]”를 입력
7. B창에서 “ps f”명령을 통해 프로세스
문맥 교환
작업의 전환
작업과 이를 위한 환경을 모두 바꾸는 것
문맥 교환(Context Switching)
- CPU를 차지하던 프로세스를 옮기고 새로운 프로세스를 실행
- 직전 작업 정보들을 모두 PCB를 통해 백업
- 원복 시 기록된 PCB 백업정보들을 재활용
문맥 교환 절차
프로세스의 구조
메모리내 프로세스 구조
- 코드 영역(Code/Text/Instruction Area)
- 데이터 영역(Data Area)
- 스택 영역(Stack Area)
- 힙 영역(Heap Area)
코드 영역(Code/Text/Instruction Area)
• 프로그램 명령들이 기술된 곳
• 읽기 전용
데이터 영역(Data Area)
• 코드가 실행되면서 사용하는 변수나 파일 등의 각종 데이터를 모아놓은 곳
• 읽기와 쓰기 가능
스택 영역(Stack Area)
• 운영체제가 프로세스를 실행하기 위해 부수적으로 필요한 데이터를 모아놓은 곳
• 함수를 호출하면 함수를 수행하고 원래 프로그램으로 되돌아올 위치를 이 영역에 저장
• 운영체제가 사용자의 프로세스를 작동하기 위해 유지하는 영역
• 사용자에게는 보이지 않음
힙 영역(Heap Area)
• 동적으로 생성한 데이터 영역
• 주로 malloc이나 new 명령에 의해 생성됨
프로세스 생성과 복사
fork() 시스템 함수
- 실행중인 프로세스로부터 새로운 프로세스를 생성
- 자신과 동일한 프로세스를 자식 프로세스로 생성
- 함수의 결과값을 통해 자신이 부모인지 자식인지를 알 수 있음
• 부모: 자식프로세스의 ID
• 자식: 0
fork() 동작 과정
- PCB를 포함한 부모 프로세스 영역의 대부분(데이터, 힙, 스택 영역)이 자식 프로세스에 복사되어 새로운 프로세스가 만들어짐
• 새로운 PCB가 생성되어 내용물이 상속됨
- 단, PCB의 내용 중 다음이 변경됨
• 프로세스 구분자(PID)
• 메모리 관련 정보
• 부모 프로세스 구분자(PPID)
• 자식 프로세스 구분자(CPID) 등
fork() 사용의 장점
프로세스의 생성 속도가 빠름
• 이미 메모리에 적재된 프로세스를 기반으로 새로 만들어지기 때문
추가 작업 없이 자원을 상속할 수 있음
시스템 관리를 효율적으로 할 수 있음
• 계층형 구조
• 부모-자식 관계의 구조 때문임
fork() 함수 실습
코드 작성 및 실행
프로세스의 계층 구조
유닉스의 프로세스 계층 구조
- 유닉스의 모든 프로세스는 init 프로세스의 자식이 되어 트리 구조를 이룸
- ps명령을 통해 확인할 경우 init가 1번으로 할당됨을 확인해 볼 수 있음
장점
- 체계화된 프로세스들에 대한 관리가 가능
- 로그인을 위한 프로세스의 경우, 사용자별 fork()를 수행하면되므로 메모리 중복(코드영역)을 최소화 할 수 있음
- 재사용이 용이
- 자원 회수가 쉬움
• 상하 관계로 인해 프로세스의 관리 및 호출 주체를 파악하기 쉬움
고아(orphan) 프로세스
- 부모 프로세스가 자식보다 먼저 죽는 경우
- 계층적 구조에서 따로 떨어져 있음
'2-1 > 운영체제' 카테고리의 다른 글
운영체제 5주차 정리 - 2 (0) | 2023.03.30 |
---|---|
운영체제 5주차 정리 - 1 (0) | 2023.03.30 |
운영체제 3주차 정리 - 2 (0) | 2023.03.13 |
운영체제 3주차 정리 - 1 (2) | 2023.03.13 |
운영체제 2주차 정리 - 3 (0) | 2023.03.09 |