inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Học hệ điều hành dễ dàng qua hình ảnh

Phân khúc (Chính sách nhóm)

논리주소와 BoundAddress의 비교에 대한 질문

Đã giải quyết

305

baldong

3 câu hỏi đã được viết

1

메모리의 주소 수업을 하실 때,
논리주소(상대주소)는 항상 자신의 위치를 0x0번지라고 여긴다라고 하셨는데

세그멘테이션 수업에서
해당 CPU가 메모리관리자에게 전달해준 논리주소가 0x632라 하셨고,
메모리 관리자가 이 값을 Bound Address와 비교하여,
메모리 침범 여부를 확인한다는 사실로부터

0x0 을 시작으로 0x632에 걸쳐 인접하여있고, 총 크기가 632라고 이해하면 타당한가요??

운영체제

Câu trả lời 1

0

gamja5

안녕하세요 김병수님!

사용자 입장에서는 0x0에서 0x632만큼 떨어진 거라고 볼 수 있습니다.
물리 주소로 변환할 때는 세그멘테이션 테이블의 Base Address와 0x632를 더해서 주소를 구합니다.
Base Address는 프로세스마다 다른 값을 가지고 있죠. (그래서 각 프로세스의 논리주소가 632로 같더라도 실제 주소는 다른 것입니다.)
Bound Address는 물리 주소로 변환할 때 메모리 관리자가 메모리 침범을 확인하기 위해서 사용됩니다.
따라서 0x632의 크기를 632라고 이해하는 건 오해입니다!

0

baldong

각 프로세스의 논리주소가 632라는 부분이 이해가 잘 가지 않습니다 ㅠㅠ
각 프로세스는 논리주소가 모두 0x0이라는 생각에 제 이해가 강하게 묶인 것 같습니다.

이해에 대한 케이스를 좀 나누어 생각해보았습니다.

  1. 가령, 어떤 프로세스가 차지하는 메모리가 0~1000 칸이라고 하였을 때,
    프로세스내 각 논리영역(CODE, DATA, HEAP, STACK) 들의 주소가
    CODE 영역의 세그먼트는 0~200
    DATA 영역의 세그먼트는 201 ~ 400
    HEAP 영역의 세그먼트는 401 ~ 631
    STACK 영역의 세그먼트는 632 ~ 1000
    이라고 하면, 프로세스의 논리주소는 0x0 이고
    프로세스내 STACK 세그먼트의 주소는 0x632 라고 이해할 수 있다.
    즉, 프로세스의 주소는 0x0이지만,
    프로세스 내의 특정 영역의 주소는 0x632번지가 될 수 있다고 이해하는 경우입니다.

     

  2. 두번째로, 사용자 입장을 프로세스의 입장의 상위 개념으로 보고,
    사용자 입장에서 0 ~ 1000칸 이라고 했을 때,
    프로세스 A, B, C, D 가 1000칸에 나누어져 들어가있고
    프로세스 C의 주소가 632번지라고 이해하는 경우입니다.

사용자 입장의 주소와 프로세스의 입장에서 논리주소를 다르게 이해해야하는 걸까요?

0

gamja5

사용자와 프로세스 모두 논리주소를 바라볼 때 0x0이 시작주소인 것이 맞습니다!(1번 경우는 맞음!)
다만 실제로 사용하는 주소(물리 주소)로 변환할 때 프로세스마다 고유의 세그멘테이션 테이블이 있고,
세그멘테이션 테이블에는 Base Address가 있기 때문에 이 값에 논리 주소를 더하기 때문에 여러 프로세스의 주소가 겹치지 않는 것입니다.

만약 프로세스 A의 0x632와 프로세스 B의 0x632가 논리주소 관점(사용자, 프로세스)으로 본다면 동일한 주소라고 생각할 수 있지만
실제 주소(물리 주소)는 메모리 관리자가 계산합니다.


만약 프로세스 A의 세그멘테이션 테이블에서 0x632가 포함되는 2번 세그먼트이고, 2번 세그먼트의 Base Address가 5000이라면 프로세스 A의 논리주소 0x632의 실제 주소는 5632라고 볼 수 있고

프로세스 B의 세그멘테이션 테이블에서 0x632가 포함되는 2번 세그먼트이고, 2번 세그먼트의 Base Address가 20000이라면 프로세스 B의 논리주소 0x632의 실제 주소는 20632라고 볼 수 있습니다.

2번 경우를 오해하고 있는 것 같습니다 ㅎㅎ

쉽게 생각하려면 우리가 생각하는 모든 주소는 논리 주소라고 생각하시면 됩니다!

1

baldong

정리가 된 것 같아요. 친절한 답변 감사합니다!

강의 정말 잘 듣고있습니다. 엄청 많은 시간을 투자하셨을텐데 질 높은 강의 정말 감사드립니다.
'자료구조와 알고리즘'도 감자님과 함께!

프로그램과 프로세스 강의 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

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

공유 메모리 및 프로세스 생성 관련

3

491

1

레지스터 관련

2

387

1

"컴파일과 프로세스" 강의 1분 37초

1

237

1

"프로세스 생성과 종료" 강의 3분 47초

1

233

1