해결된 질문
작성
·
237
1
영상 04:28 을 보면
MMU가 '물리 메모리 n번지에 있는 세그멘테이션 테이블 소환!' 이렇게 말하는데,
세그멘테이션 테이블이 물리메모리의 n번지마다 여러 개가 존재해서 CPU가 요청한 세그먼트의 정보가 있는 특정 세그멘테이션 테이블을 가져오는 것 인가요?
아니면 그냥 물리메모리 어딘가에 존재하는 1개의 세그멘테이션 테이블을 가져오는 것을 물리메모리 n번지 라고 표현한 것 인가요?
답변 1
1
안녕하세요 DongKyu Park님!
질문하신 1번 내용을 말하는 것입니다.
덕분에 프로세스마다 세그멘테이션 테이블이 따로 존재하기 때문에 각 프로세스에서 같은 주소를 가리켜도 실제 물리메모리 주소가 달라지는 것이죠~
궁금증이 해결되셨나요? 😊
1번과 2번 모두 중복될 수 있는 값입니다.
1번은 테이블의 행을 결정하는 것이고 2번은 Base Address에 더할 값이죠.
여기서 궁금증이 생기실 것 같습니다.
"그럼 세그멘테이션 테이블을 어떻게 구분한다는 거지?"
만약 세그멘테이션이 100개가 있다면 이를 구분할 수 있어야 각 프로세스가 다른 물리메모리를 사용할 수 있겠죠?
각 프로세스는 Segment Table Base Register에 자신이 사용하는 세그멘테이션 테이블의 주소를 가지고 있습니다.
이 레지스터는 컨텍스트 스위칭할 때마다 각 프로세스에 맞게 설정되므로 해당 레지스터에 저장된 내용으로 접근하면 자신의 테이블을 참조할 수 있게 됩니다.
그다음에서야 세그먼트 번호와 논리 주소를 이용해 물리 메모리의 주소를 알아내는 것이죠~😄
감자님..! 강의와는 별개의 질문인데
인프런 블로그에 올리셨던 컴퓨터 공학(CS)이 중요할까요? 글의 내용 중
한 번은 사용자의 특정 요청 중 일부가 아주 가끔 중복돼서 들어오는 경우가 있었어요.
어떤게 원인이였고, 운영체제에서 어떤 개념으로 발생한 문제였는지 키워드 정도만 살짝 알려주실 수 있을까요? 궁금해요!
안녕하세요 DongKyu Park님!
당시 고객의 요청이 정말 간헐적으로 중복으로 들어왔어요.
이건 회사의 수입과 연관이 되어 있어서 심각한 문제였는데 코드를 아무리 봐도 에러가 없어서 해결하기 어려웠었어요...🤐
에러도 재현할 수 없어서 고치기는 불가능해 보였어요.
여기서 문득 에러가 거의 발생하지 않는 다는 점, 코드는 이상이 없다는 점을 곰곰이 생각하다가 공유자원 문제일 수도 있겠다는 생각이 들었어요 ㅎㅎ
그래서 서칭을 해봤는데 해당 영역이 멀티프로세스로 실행된다는 결론을 얻어서 "이건 공유자원 문제가 확실하다"라는 생각이 들었어요.
제가 생각한 원인이 확실하다는 생각이 들었지만 당시에 사용하던 언어로 동시성 프로그래밍을 해보지 않아서 사용법을 서칭하고 해당 영역을 임계영역으로 잡아줬더니 에러가 깔끔하게 해결됐었네요.
이때 다시 한 번 기본기가 중요하다는 생각이 들었어요.
만약 제가 공유자원과 임계영역의 개념을 몰랐다면 계속 이유 모를 버그로 해결하지도 못했을 것 같네요. 😊
그러면.. CPU가 데이터를 요청할 때 MMU에 넘기는 정보 2가지에서
세그먼트 3번
0x100번지
2번은 논리주소로 프로세스마다 중복될 수 있는 값이고
1번은 중복될 수 없는 고유한 값인가요?
Segment Table Base Register 을 이용해 세그멘테이션 테이블을 찾을 때 1번 세그먼트의 번호값으로 찾는 것일까요?