공유 메모리 및 프로세스 생성 관련
안녕하세요.
프로세스 동기화 부분에서 공유 메모리 관련하여 궁금한 점이 생겨 질문을 남기게 되었습니다.
메모리는 커널 영역과 사용자 영역으로 구분되어 커널 영역에는 OS, 사용자 영역에는 일반 프로세스가 적재되는걸로 이해를 했습니다.
그렇다면 공유 메모리나 버퍼캐시 같은 메모리는 사용자 영역에 위치해있는지 아니면 OS 영역에 위치해있는지 궁금합니다.
그리고 프로세스 생성시 0번 init 프로세스를 fork해서 코드와 데이터 영역의 부분을 exec 된다고 설명해주셨는데 일반 프로세스가 자식 프로세스 생성시에도 init 프로세스를 복사하는지 그냥 자기 자신을 복사해서 exec하는지 궁금합니다.
Câu trả lời 1
1
안녕하세요 akgkfk3님!
질문에 답변드리겠습니다ㅎㅎ
공유메모리는 해당 공유메모리를 생성하는 프로세스의 주소공간에 할당됩니다.
즉 유저영역에 할당됩니다.
따라서 속도도 가장 빠른 방식입니다.
버퍼의 경우 공유메모리 내에 존재하게 되는데 공유메모리가 유저영역에 있으므로 버퍼도 유저영역에 존재합니다.
일반 프로세스는 init 프로세스를 복사하지 않고 자기 자신을 복사합니다!
😀
0
연달아 질문하게 되서 죄송합니다.
가상메모리 개요 강의에서 가상 메모리의 크기는 CPU의 Bit 수, 메모리의 크기에 의존한다고 말씀해주셨는데 그렇다면 32bit CPU에서는 최대 가상메모리의 크기는 4GB이므로 만약에 실 물리 메모리가 2GB이라면 스왑 영역의 최대 2GB까지 합친 것으로 이해했습니다.
다만, 그 뒤의 부분에서 MMU가 보는 물리 주소 관점으로 물리 메모리와 스왑 영역을 본다고 하셨는데 4GB의 가상메모리로 4GB짜리 프로세스 5개를 실행할 수 있다는 것이 이해가 가질 않습니다 ㅠㅠ
64bit CPU라면 논리 주소 공간이 TB급 이상으로 할당이 가능하므로 실 물리메모리가 4GB이라 하여도 스왑 파티션의 용량을 16GB까지 할당하였다면 MMU 관점에서는 20GB 램을 가지고 있는 것으로 판단하여 Swapping을 통해 실행이 가능하다고 이해하였으나 예로 들어주신 32bit CPU로 이해했을 때는 직관적으로 와닿지가 않네요 ㅠㅠ...
프로그램과 프로세스 강의 3분47초
1
635
1
컴파일 과정
1
545
1
페이징&가상메모리 관련 질문 드립니다.
1
394
1
페이징(배치정책) CPU에 논리주소를 물리주소로 전달해 줄때 계산 단위
1
470
1
운영체제의 역사 영상에서
1
470
2
프로세스 동작 및 스케줄링 알고리즘 관련 질문 드립니다.
1
488
1
인터럽트 발생 시점과 비동기 방식
1
583
2
PCB 상태 실행에서 대기 상태에서 준비 상태로 변경시
1
460
2
프로세스 동기화 질문 드립니다.
1
340
1
부모 프로세스는 프로그램을 실행하지 않아도 생기는 건가요?
1
410
1
페이지드 세그멘테이션 기법에서 메모리 주소 변환 할때요
4
397
1
오버헤드란?
1
4033
1
논리주소와 BoundAddress의 비교에 대한 질문
1
305
1
MLFQ 알고리즘
2
401
1
FIFO 알고리즘 / RR 알고리즘
1
439
1
블로그 업로드 질문
1
376
1
다중큐 강의에서 I/O 작업시 질문
2
243
1
예제코드 질문
1
297
1
하드디스크와 메모리 질문 있습니다!
0
215
1
컴파일 과정 예시와 관련해서 질문드립니다!!
1
271
1
예제 코드 관련 질문입니다!
1
252
1
레지스터 관련
2
387
1
"컴파일과 프로세스" 강의 1분 37초
1
237
1
"프로세스 생성과 종료" 강의 3분 47초
1
233
1

