Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 인바운드 #아웃바운드 #방화벽설정
- aws #아키텍트 #과정 #vpc #인프라 구축 #퍼블릭 #보안그룹 #생성 #http #ipv4
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- storage #로컬스토리지 #세션스토리지 #백그라운드 서비스
- tar #build #배포 #통신포트 #설정방법 #linux #apache
- samba #가상머신 #daemon
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #igw #curl #명령어 #http
- mysql #linux #설정 #wordpress #웹사이트 #db 연결 #
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #route53 #igw #연결
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #웹개발
- aws #아키텍트 #과정 #vpc #인프라 구축 #퍼블릭 서브넷 #안에 #ec2 인스턴스 #ami #생성 #firewall
- 프로세스 #CPU #시공유 #커널
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #private subnet
- oracle vmbox #rocky #linux9 #명령어 #암호화인증 #해시알고리즘
- aws #아키텍트 #과정 #vpc #인프라 구축 #php #웹페이지 #http #public #instance
- aws #아키텍트 #과정 #s3 #bucket #생성 #이미지업로드
- 쓰레드 #쓰레드풀 #프로세스
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스
- ubuntu #설정변경 #vmware #vmbox #linux #명령어
- 비트 #바이트 #이진수
- sasac #aws 클라우드 #아키텍트 과정 #가상화 #vmbox #vmware #esxi #tar #selinux
- haproxy #wordpree #php #linux #가상화 #가상머신 #내용정리
- 공간복잡도 #공간자원 #캐시메모리 #SRAM #DRAM #시간복잡도
- aws #아키텍트 #과정 #vpc #인프라 구축 #public subnet #internet gateway #연결
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #AI #서버 #자동화 #SQL #KDT #기본문법 #데이터베이스 #Computer #Science #CPU #메모리
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #OSI #ISO #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- aws #아키텍트 #과정 #vpc #인프라 구축
- 스파르타코딩클럽 #부트캠프 #IT #백엔드 #머신러닝 #딥러닝 #AI #서버 #자동화 #SQL #기본문법 #데이터베이스 #DBMS #Oracle #MongoDB #아키텍쳐 #DB
- virtualbox #vmware #router #nat #pat #네트워크 구성도 #aws #ubuntu #
- aws #클라우드 #퍼블릭 클라우드 #아키텍트 #과정
Archives
- Today
- Total
요리사에서 IT개발자로
스파르타 코딩클럽(부트캠프) 3장 프로세스 생명주기와 프로세스메모리 본문
프로그램과 프로세스
프로그램이 저장되어 있는곳 = 보조기억장치
프로그램이 로딩되는곳 = 주 기억장치
프로그램을 실행하는 주체 = 프로세스
작업을 처리해주는 주체 = 쓰레드
쓰레드는 필요할 때마다 생성되며, 프로세스 상세의 스레드 수는 최근 평균 스레드 갯수 통계값
프로세스 상태변화 복습
프로세스의 상태변화와 스케쥴링
스케쥴링 알고리즘에 따라 프로세스들은 상태변화가 일어나며 준비/수행 상태일 때 CPU를 사용
아래 그림에서
- 🟠은 프로세스들의 상태를 의미하고
- 🔜 은 스케쥴링에 따라 상태가 변화되는 동작을 의미합니다.
- 수행 -> 대기 (Running->Waiting) : I/O요청이 발생하거나, 자식 프로세스가 종료 대기를 할 때
- 수행 -> 종료 (Running -> Terminate) : 프로세스를 종료시켯을때
- 수행 -> 준비 (Running-> Ready) : 인터럽트가 발생했을때
- 대기 -> 준비 (Waiting -> Ready) : I/O가 완료되었을때
여기서 1,2은 프로세스가 스스로 CPU를 반환하기에 비선점 스케쥴링이 발생되고
3,4은 프로세스에서 CPU를 강제로 할당(회수)해야 하므로 선점 스케쥴링 이 발생됩니다.
프로세스 상태 (Status)
신규 (New)
- 프로세스가 이제 막 메인메모리에 올라온 상태
- 실행하는 것은 불가능
- 수용 동작을 거쳐야 준비단계로 넘어간다
준비 (Ready)
- 변수 초기화 등 기초 준비작업을 모두 끝나고 실행을 할 수 있는 상태
- 스케쥴러를 통해 발송(Dispatch) 되어야 수행상태가 된다
1.신규 프로세스가 수용
2.대기프로세스의 입출력/이벤트 완료
3.수행프로세스가 중단
4.준비상태완료
수행(Running)
- CPU가 실제로 프로세스를 수행하고 있는 상태
- 선점 스케쥴링에 의해 중단되면 준비상태
- 입출력/이벤트가 필요하면 대기상태
- 수행이 완료되면 종료상태
준비 프로세스가 스케쥴러를 통해 발송되면 수행상태가 된다.
수행 상태에서 해제되는 경우
수행 -> 준비(중단)
-CPU의 과부하가 판단되는 경우
수행 -> 대기
-I/O나 Event Wait가 있을 경우
-이후 I/o나 Event가 끝나면 Ready 상태로 복구
대기 (Watining)
- 프로세스 도중에 I/O 작업이 필요하여 I/O 작업을 수행하는 상태
- 이 때 CPU는 I/O를 기다리며 다른 프로세스를 수행
- 대기상태가 끝나면 프로세스는 다시 준비상태가 되고, 잠시 후 다시 수행한다.
종료(Terminated)
- 최종적으로 프로세스가 종료된 상태
- 사용하던 메모리 영역이 해제된다.
시간 공유 시스템에서는 수행상태에서 할당된 시간이 종료(Expired)되면, 대기 상태를 거치지 않고 바로 준비상태로도 변할 수 있다. 중단(Inturrept)과 같이 동작
대기 큐 (Waiting Queue)
1. Job Queue
- HDD 에 있던 프로그램들이 메모리에 올라올 때, 메인 메모리가 가득 찼거나 CPU가 다른 작업을 수행 중 이라면 메모리에 올라오기 전 어느정도 기다려야하는데 HDD의 프로그램들이 잠시 기다리는 곳을 Job Queue라고 한다.
2. Ready Queue
- 메인 메모리에 프로그램이 올라왔다 하더라도 바로 CPU의 서비스를 받을 수 없다.
- 다른 프로그램이 수행 중 이라면 기다렸다가 해당 프로그램이 I/O를 시작하거나 시공유 시스템의 경우 기존 프로세스가 시간초과되면 실행된다.
- 이미 메모리에 올라온 프로세스들이 실행을 위해 대기하는 곳을 Ready Queue 라 한다.
3. Device Queue
- I/O 장치 (프린터, 키보드, 마우스 등등) 을 이용하려면 기존 I/O 작업이 끝나기를 기다렸다가 밀려있던 모든 작업이 끝날 경우 I/O장치를 사용할 수 있다
- 프린터는 프린터큐, 마우스는 마우스큐, 키보드는 키보드큐와 같이 각각 I/O장치들이 각자의 대기 큐를 가지고있는것들을 Device Queue 라 한다.
Terminated는 대기큐가 없다
이유는 프로세스가 종료될 때 기다릴 필요없이 바로 종료된다.
스케쥴링 (Scheduling)
1. Job Scheduling
- Job Queue의 프로그램들은 어떤 순서로 메모리에 올릴 것인지가 결정됨
- 이러한 과정은 프로그램이 새로 시작될 때나 메인메모리가 가득찬 경우 등의 상황에만 발생함으로 어쩌다 한번(수분~수십분) 일어남
Long Term Scheduler
프로그램이 새로 시작될 경우나 메인 메모리가 가득찬 경우 등의 상황에만 발생함으로 어쩌다 한번(수분~수십분) 일어나며 긴간격으로 동작 하는것을 칭한다.
2. CPU Scheduler
- Ready Queue의 프로세스들은 어떤 순서로 서비스 할 것인지에 대한 스케쥴러이다.
- 모든 스케쥴링 중 CPU 스케쥴링이 가장 중요하다.
Short tern Schduler
시공유 시스템의 경우 이러한 과정은 1초에도 수십번에서 많게는 수백번도 일어나는 것을 칭한다
3. Device Scheduler
- Device Queue의 프로세스들을 어떤 순서로 I/O 장치를 이용하게 할 것인지에 대한 스케쥴러이다.
- 이는 Disk Scheduler, Printer Scheduler, Mouse Scheduler 등 I/O, 보조기억 장치 스케쥴러를 통들어 가리기는 말
I/O Bound Process VS CPU Bound Process
-I/O Bound Process : 대부분의 시간을 I/O 하는데 쓰는 프로세스
-CPU Bound Process : 대부분의 시간을 CPU로 연산하는데 쓰는 프로세스
-운영체제 (Job Scheduler)는 이들을 적절하게 배합하여 I/O 장치와 CPU 둘다 오래 쉬지않게해야한다.
(성능 향상 목적)
주-보조 교환(Swapping)
1. Swapping
- 서버와 같이 여러 사용자가 하나의 메모리를 공유할 때 한사용자가 자리를 비운 경우 돌아올 때 까지 프로세스의 메모리를 할당할 이유가 없다.
- 그렇기에 PCB(Process Control Block)의 CPU Time 등을 확인하여 오랫동안 동작이 없는 프로세스는 HDD로 내리고 다른프로세스를 실행하거나 기존 프로세스에 메모리를 더 할당하는 등 메모리를 더 효율적으로 활용한다.
- 그 후 동작없던 프로세스 사용자가 돌아와 작업을 수행한다면 다시 HDD 에서 메모리로 올린다.
- Swap out : 메모리에서 HDD로 내리는 작업
- Swap in : HDD 에서 메모리로 올리는 작업
이렇게 임시메모리의 목적으로 사용되는 HDD공간을 Backing Store 혹은 Swap Device라 칭한다.
Midium Term Scheduler
- Swapping 역시 여러 프로세스들이 HDD로 내려가고 다시 메모리로 올라오고 하기에 어떤 순서로 프로세스들을 내리고 올릴지 결정해야한다.
- 이러한 스케쥴링 작업은 Short Term Scheduling 보다는 적게 일어나지만 Long Term Schduling 보다는 자주 일어난다
- 때문에 이러한 스케쥴링 작업(Swapping Scheduling)을 Midium Term Schduling 이라 한다.
문맥 교환 (Context Switching)
1. Context Switching
- CPU 시공유 시스템의 경우 일정시간이 지나면 기존 프로세스를 준비상태로 만들고 다른 프로세스를 수행 상태로 만들어 실행한다.
- 이렇게 실행하는 프로세스를 Switch 하는 것들을 통틀어 Context Switching 이라 한다
2. Scheduler
- Context Switching 을 전문적으로 담당하는 스케쥴러는 위에서 배운 CPU 스케쥴러이다
- CPU 스케쥴러는 Ready Queue에 대기중인 프로세스를 어떠한 순서로 실행시킬 것인지에 대한 스케쥴러이다.
3. Dispatcher
- 프로세스 A의 코드 중에 100번 라인 까지 실행했고 작업 중 10개의 데이터를 레지스터에 저장한 경우, 스위치할 때 이정보들을 보존해야 A의 차례가 돌아왔을 떄에 이전에 수행하던 작업이 끊기지 않고 수행할 수 있다.
- 이처럼 프로세스 A를 수행하다가 B로 넘어가면 그러한 정보들을 저장, 다시 A의 차례까 왔을 때 정보를 다시 꺼내어 PC, SP, Register등에 할당한다.
- 이러한 작업을 수행하는 프로그램이 Dispatcher 라 한다.
대부분의 OS는 CPU 스케쥴링 방법 중 시공유 시스템을 사용한다.
- CPU 시간을 효율적으로 사용하기 위해서 운영체제는 CPU를 사용하지 않는 프로세스나 스레드가 있다면 다른프로세스나 스레드에게 CPU 시간을 할당한다.
- CPU 시공유 시스템을 사용함으로 여러 프로세스나 스레드가 동시에 실행되는 것처럼 보일 수 있다.
- 실제로 CPU가 매우 빠르기에 짧은 시간 동안 여러 프로세스나 스레드를 번갈아 가며 실행 할 수 있다.
- 이를 통하여 CPU가 최대한 효율적으로 사용됨으로 운영체제는 더 많은 프로세스나 스레드를 동시에 실행 할 수 있다.
프로세스 메모리
프로세스의 메모리 구조
1. Code 영역
- 실행할 프로그램의 코드가 저장된다. CPU는 이 영역에서 명령어를 하나씩 가져와 처리한다.
2. Data 영역
- 전역변수와 정적변수가 저장된다
- 이 변수들은 프로그램이 시작 될 때 할당하여 프로그램 종료 시 소멸된다.
BSS(Block Stated Symbol) 영역
- BSS 영역에는 초기화 되지 않은 전역변수가 저장된다.
- 초기화 된 전역변수는 Data 영역에 저장되어 비휘발성 메모리인 ROM 에 저장되는 데 이 부분은 비용이 많이 들어 RAM에 저장될 것 인지 ROM에 저장될것은 구분하기위해 영역을 구분해 사용한다.
3. Stack 영역
- 호출된 함수의 수행을 마치고 복귀할 주소 및 데이터(지역변수, 매개변수, 리턴값 등) 를 임시로 저장하는 공간
- 이 영역은 함수 호출시 기록하고, 함수의 수행이 완료되면 사라진다.
- 매커니즘은 자료구조(Stack) 에서 배운 LIFO(Last in First Out) 방법으로 저장/출력 한다.
- 컴파일 시 Stack 영역의 크기가 결정되기 떄문에 무한정 할당 할 수 없다.
- 따라 재귀함수가 반복해서 호출되거나 함수가 지역변수를 메모리 초과할 정도로 많이 가지고 있다면 Stack over Flow가 발생한다.
Code, Data, Stack 영역들은 컴파일 할 때 Data, Stack 영역의 크기를 계산하여 메모리 영역을 결정한다.
4.Heap 영역
- 동적 데이터 영역이다.
- 메모리 주소 값에 의해서만 참조되고 사용되는 영역이다. 따라서, 프로그램 동작시 (런타임)에 크기가 결정됨
- ex) Stack에서 Pointer 변수를 할당 -> Pointer 가 가리키는 Heap 영역의 임이의 공간부터 원하는 크기만큼 할당하여 사용
- Heap 영역은 런타임에 결정된다. 자바에서는 객체가 Heap 영역에 생성되고 GC에 의해 정리됨
- GC란 Garbage Collector의 약자, 안쓰는 Heap 영역을 치우는 청소부
커널 프로세스의 메모리
커널(Kernel)
- 커널은 대부분의 운영체제(OS)의 주요 구성요소이며 컴퓨터 하드웨어와 프로세스를 이어주는 핵심 인터페이스. 이 두가지를 효과적으로 통신한다.
- 커널은 운영체제가 아니라, 운영체제의 주요 구성요소이다.
- 커널은 메모리 관리, 프로세스 관리, 하드웨어와 프로세스 사이에서 명령을 즉시 실행 할 수 있는(인터프리터) 역할을 수행하거나 시스템의 호출이나 보안등의 기능을 수행한다.
- 대부분의 OS에서 커널은 하나의 프로세스가 아니라 컴퓨터 하드웨어와 프로세스를 이어주는 인터페이스이다.
- OS에서 응용프로그램 조회하여 강제 종료 할 수 있는 기능도 커널 프로세스의 역할
Code 영역
- 시스템 콜, 중단(인터럽트) 처리 코드
- CPU, 메모리 등 차원 관리를 위한 코드
- 편리한 인터페이스 제공을 위한 코드
Data 영역
- CPU, Memory 등 하드웨어 자원을 관리하기 위한 자료구조가 저장된다.
- PCB(Process Controll Block)자료구조가 저장된다
- 현재 수행 중인 프로세스의 상태, CPU 사용 정보 등을 유지하기 위한 자료구조이다
- 프로세스 제어 블록이란 특정한 프로세스를 관리할 필요가 있는 정보들을 포함하는 운영체제 커널의 자료구조.
- PCB는 각 프로세스에 대한 다양한 정보를 담고 있는 데이터, 사람으로 따지면 주민등록증.
- 각 프로세스의 PCB는 OS 내부의 Process Management 부서에서 관리, PC Register, MMU 정보 ,Process 의 상태, CPU Time, PID(Process ID)등 많은 정보들이 포함되어 구조체와 같이 구성됨
- 운영체제가 프로세스에 대한 정보를 담고있는 구조체
- PCB는 중요한 정보들이 담겨 있기에 운영체제 -> 커널 내부에 담겨진다.
PCB는 해당 프로세스의 실행 정보, 상태 정보를 저장하는 자료구조로 커널 프로세스에 존재한다.
Stack 영역
- 각 Process 의 커널 스택을 저장
- 프로세스는 함수호출시 자신의 복귀주소를 저장하지만 커널은 커널 내의 주소가 된다
- 각각의 프로세스마다 별도의 스택을 두어 관리한다.
커널은 힙메모리가 없다.
커널은 운영체제(리눅스)에서 동적메모리 할당을 위해 필요한 기능들을 커널이 제공하는데 운영제제는 커널에서 제공하는 기능을 사용하여 메모리 풀 (Memory Pool)을 관리한다.
정리
프로세스 : 메모리에 올라온 프로그램
프로세스 생명주기 : 신규 - 준비 - 수행 - 대기 - 종료
PCB : 프로세스의 실행 정보와 상태 정보를 저장하는 자료구조 (PID, PC, Register, MMU 등)
대기 큐(Queue) : Job, Ready, Device Queue 등
Scheduler : Job, CPU, Device Schduler 등
Swapping : 사용하지 않는 프로세스는 HDD로 내리고 사용하면 메모리로 올리는 작업
Context Switching : Running 프로세스를 Ready로 만들고 다른 프로세스로 전환
Dispatcher : 컨텍스트 스위칭 할 때 필요한 정보(PCB를 저장하고 꺼내는 프로그램)
CPU 시간 공유 시스템 : OS에서 프로세스가 시간단위로 나뉘어 CPU를 사용할 수 있도록 관리해주는 시스템
프로세스 메모리 공간 : 프로세스 주소 공간은 Code, Data, Stack, Heap 으로 구성된다.
커널 : 대부분의 운영체제(OS)의 주요 구성 요소이며 컴퓨터 하드웨어와 프로세스를 이어주는 핵심 인터페이스
PCB : 프로세스의 실행 정보와 상태 정보를 저장하는 자료구주로 커널 프로세스에 존재한다.
반응형
'Computer Science' 카테고리의 다른 글
스파르타 코딩클럽(부트캠프) 6장 DBMS(데이터베이스 관리 시스템)의 기능과 종류 (1) | 2024.03.22 |
---|---|
스파르타 코딩클럽(부트캠프) 5장 DB(데이터베이스) 구조와 유형 (0) | 2024.03.21 |
스파르타 코딩클럽(부트캠프) 4장 프로세스 쓰레드와 쓰레드 (0) | 2024.03.20 |
스파르타 코딩클럽(부트캠프) 2장CPU 와 메모리 심화 (0) | 2024.03.18 |
스파르타 코딩클럽(부트캠프) 1장 CPU 와 메모리 (2) | 2024.03.15 |