안녕하세요, 혼자 공부하는 컴퓨터 구조와 운영체제를 공부하고 학습한 내용을 남깁니다.
이러한 과정을 프로세스를 생성한다라고 한다.
- 작업 관리자를 통한 현재 실행중인 프로세스 확인
- 리눅스, macOS에서는 [ps 명령어]를 통해 현재 실행중인 프로세스를 확인할 수 있다.
- 프로세스에는 크게 두 종류가 있다. 사용자가 볼 수 있는 프로세스와 사용자가 볼 수 없는 프로세스이다.
데몬(daemon), 서비스(service) : 사용자와 상호작용하지 않고 그저 정해진 일만 수행하는 프로세스
- 자신의 차례에 정해진 시간 만큼만 프로세스들은 CPU를 이용
*타이머 인터럽트는 클럭을 이용해서 하드웨어에 주기적으로 발생하는 인터럽트이다. 한정된 시간 동안 프로세스는 CPU를 이용한다. 그리고 다음 프로세스에게 CPU를 양보한다.
- 이를 활용하는 자료 구조를 프로세스 제어 블록 (PCB)
상품에 달려있는 태그와 같은 정보. 프로세스와 관련된 정보를 저장하는 태그 정보. 옷의 태그와 비슷하다.
커널영역에 PCB가 생성이 되고, 프로세스가 종료가 되면 이 PCB는 폐기된다.
이 프로세스와 관련된 온 갖 정보들을 저장한다.
- 대표적인 PCB에 담기는 정보. (운영체제마다 다를 수 있다.)
작업 관리자에서 확인 가능.
각각의 프로세스는 CPU안에 있는 여러 레지스터들을 사용한다. (프로그램 카운터, 스텍 포인터)
주소 지정을 위한 주소값들이 메모리 정보에 저장됩니다.
페이지 테이블 정보가 담긴다.
페이지 테이블은 메모리의 현재 주소를 알 수 있는 정보다.
- 문맥 교환 (프로세스의 진행절차가 실질적으로 어떻게 진행 되는가의 대한 정의)
이전 정보를 백업하고, 이러한 중간 정보를 문맥 (context)라고 한다.
-> 여러 프로세스가 끊임없이 빠르게 번갈아 가며 실행되는 원리.
데이터가 아니라 CPU가 실행할 명령어가 담기는 영역
전역 변수: 전체 영역에서 사용할 수 있는 변수, 프로그램이 실행되는 내내 유지되어할 변수가 담긴다.
*코드 영역과 데이터 영역은 고정되어 있습니다. 그래서 정적 할당 영역이라고 합니다.
프로그래머가 직접 필요한 만큼 메모리에 직접 할당할 수 있는 저장 공간
이후에 공간을 반환을 해야 한다.
요즘에는 프로그래밍 언어가 알아서 반환해주는 경우도 있다. 이를 가비지 컬렉션이라고 한다.
C언어의 경우에는 가비지 컬렉션이 없다. 그래서 일일이 메모리 공간을 반환해주어야 한다.
메모리 공간을 반환해주지 않으면 메모리 누수(= memory leak)이라고 부른다.
데이터가 잠깐 일시적으로 저장될 공간을 스택 영역이라고 부른다.
"힙과 스택 영역은 프로그램이 실행되는 과정에서 동적으로 크기가 변할 수 있다."
"프로그래머가 언제든지 정의한 변수가 사용될 수 있기 때문"
감사합니다.
참고 url - https://www.youtube.com/watch?v=Jjfah3t_xWk&list=PLYH7OjNUOWLUz15j4Q9M6INxK5J3-59GC&index=29