Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

운영체제 4주차 정리 본문

2-1/운영체제

운영체제 4주차 정리

김브래 2023. 3. 23. 22:15

프로세스 관리

실습환경 구축


가상 머신(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