안녕하세요 선생님, 꽤 시간이 지난 영상이라 질문을 보실수 있을지 잘 모르겠지만 질문 하나 남기겠습니다. 만약 가상화를 하지 않지만 os가 각 프로세스의 메모리에 대한 관리를 할수 있다면 말씀하신 프로세스의 메모리 회수성에 대한 지점은 해결될 수 있는것 아닐까요? 왜 꼭 가상화를 통해 해결되어야했던걸까요?
도스시절은 애플리케이션에게 많은 권한을 주어서 프로그램이 문제 생길시 OS가 멈추는 더 큰 문제 발생. 이 때 가상메모리 개념이 등장. 프로세스가 죽어도 OS는 가상메모리인줄 알기 때문에 실제 메모리 회수가능. 낭비도 없고 OS 손상도 없다. 가상메모리가 단순히 자원을 폭넖게 사용하기 위해 쓰는게 아니라 안전하게 사용하기 위함이 첫번째 이유였군요. 오늘도 좋은 영상 잘보고갑니다!
가상매모리 강의 너무 좋았습니다 역사랑 같이 설명해즈니까 이해가 더 잘됩니다 개발자님 근데요 이전 영상애서 80386시대에서는 프로세스1이쓰고 있으면 프로세스2가 실행 못한다고 했잖아요 그롬 가상매모리에 의해서 멀티테스킹이 가능 한건가요?? 그리고 윈도우가 리눅스에비해서 여전히 메모리 회수를 잘 못한다는데 사실인가요??
그런 가정은 윈도우 기준입니다. 그 당시 하드웨어적으로는 멀티태스킹이 가능했으나 MS-DOS가 그런 부분을 적절히 활용하지 못하고 있었던 것으로 알고 있습니다. 그리고 메모리 회수에 관해서는 그렇지 않습니다. 과거 Windows NT 시절에 그런 이야기가 있었으나 이후로는 사라졌습니다. 참고하시기 바랍니다. :)
안녕하세요! 가상메모리의 최대 장점이 프로세스에 특정 부분을 메모리에 올렸을 때, OS가 그 위치를 알고 있어서 관리가 용이하다고 이해했습니다. (이게 아마 page table을 의미하는 건가요?) 그렇다면 만약 가상메모리를 사용하지 않았을 경우에는 OS가 해당 프로세스의 메모리 주소를 모르기에 프로세스가 죽었을 경우 문제가 되는 건가요?
두 번째 보러왔습니다 ㅎㅎ 너무 잘 이해가 되네요! 한 가지 궁금한 점이 만약 어떤 PC의 총 RAM이 8GB라고 한다면, 해당 PC에 수많은 프로세스들이 돌아가고 있을 것이고, 그러면 각 프로세스당 가상메모리 공간이 할당되는 것이잖아요? 물론 대부분의 프로세스가 메모리를 매우 많이 사용하지는 않겠지만.. 그냥 단순무식하게 생각했을 때.. 8GB 라는 용량을 PC 위에서 돌아가는 수많은 프로세스들이 나누어 가져 쓰되, 나누어 가져 쓰는 각 공간(VMS)은 서로 독립되어 있다! 라고 이해하면 될까요!?
@@nullnull_not_eq_null 개발자님! 혹시 ASLR이 어떤 연결고리로 파일 시스템일부 및 레지스트리 일부가 가상화 되는지 궁금합니다! ASLR이 가상메모리에서 랜덤으로 메모리 주소를 할당하면서 보안적으로 안전성을 확보할수 있기 때문에 효율적인 면에서 가상화를 진행하는 걸까요??..
@@sml3592 간단합니다. 파일 및 레지스트리 입출력 API에 대한 시스템 콜 함수의 코드를 수정해 실제 HDD나 레지스트에 정보를 쓰지 않고 다른 메모리나 임시파일에만 쓴 다음 쓰기나 읽기 성공한 것으로 함수가 반환하면 됩니다. 물론 나중에 OS가 변경된 것을 실제 레지스트리나 파일에 반영을 해주거나 반대로 몽땅 날려버리면 모든 것이 그 전으로 돌아가지요.
가상메모리를 안쓰고 램과 하드를 직접 쓰다가 죽었을때 그 영역을 회수하는 방법은 안되나요? cs 문외한의 시선에서 봤을때는 가상메모리라는 개념을 써서 관리하나 그냥 os 가 직접 쓰던 메모리 기억해서 컨트롤하는거나 같은거 아닌가란 생각이 들어서 궁금해 질문해 봅니다...
네, 안 됩니다. OS를 제작 하거나 OS가 DOS처럼 작동하면서 아무런 제어권을 행사하지 않는다면 모르겠지만 가상메모리를 지원하는 OS환경에서 특정 User mode 프로그램이 물리메모리에 직접 접근하는 것은 허용되지 않습니다. 임의 접근을 시도할 경우 프로그램이 소위 죽습니다.
프로세스가 메모리보다 큰 경우는 없고 프로세스가 작동하기 위해 필요했던 메모리가 RAM 최대 크기를 넘어가는 일은 늘 있어왔습니다. 그 시절엔 결국 로드된 기존 데이터를 내리고 덮어써서 작동했습니다. 그전 데이터를 읽으려면...다시 로드 해야 했지요. 심지어 FDD로... ^^;;
답변 감사합니다. 이전 질문과 연관해서 두 가지 더 여쭤봐도 될까요? 가상 메모리 이전에도 그렇게 덮어씌우면서까지 로드했다면 왜 많은 교재에서 ‘가상 메모리는 물리 메모리보다 큰 프로그램을 실행할 수 있게 만든다’라고 할까요? 말씀하신 방식대로라면 가상 메모리가 없어도 충분히 가능할텐데요. 두 번째로 가상 메모리를 도입했을때 페이지 폴트가 발생하면 보조 메모리로부터 필요한 명령어와 데이터를 주 메모리로 로드할텐데 왜 가상 메모리 도입 이전보다 속도적으로 이점이 있다고 하는걸까요?
@@googoo-uh6rn 대량 DB 서버를...사용자가 요구가 늘어날 때마다 관리자가 핫스왑 HDD를 넣었다 뺐다 할 수 있을까요? ^^;;; 큰 메모리를 사용하는 프로그램을 로드할 수 있다는 것이 그것을 '참아줄만 하다'는 아닐 수 있다는 점을 생각하시면 되겠습니다. 그리고 페이지 폴트는 잘못된 접근에 해당하지요 허용되서는 안 됩니다. 그리고 보통의 경우 실행 코드를 페이지 아웃 하지는 않습니다. 프로세스가 사용하는 데이터 메모리를 페이지 아웃하지요. 참고하시기 바랍니다.
좋은 영상 감사합니다! 가상 메모리가 추상화하는 대상이 기본적으로 HDD이고 이를 캐싱하는 것이 RAM이라고 알고 있었는데, 설명하시는 내용을 보니 제가 좀 잘못 알고 있었다는 생각이 듭니다! 가상메모리는 RAM과 HDD를 한꺼번에 추상화하는 것일까요? 혹은 추상화의 단계가 따로 있는 것일까요?
왜 쓰는건지 설명해주시는게 너무 좋습니다.
음...그게 제 스타일인데요. 수업할 때, 이렇게 이유를 알려드리면 대부분 좋아하시더라고요. 피드백 및 좋은 평가 감사합니다. ^^
안녕하세요 선생님, 꽤 시간이 지난 영상이라 질문을 보실수 있을지 잘 모르겠지만 질문 하나 남기겠습니다.
만약 가상화를 하지 않지만 os가 각 프로세스의 메모리에 대한 관리를 할수 있다면 말씀하신 프로세스의 메모리 회수성에 대한 지점은 해결될 수 있는것 아닐까요? 왜 꼭 가상화를 통해 해결되어야했던걸까요?
네, 맞습니다. 메모리를 가상화 하는 이유는 자원회수에 대한 문제도 있지만 보안을 비롯해 여러 다른 이유가 맞물려 있습니다. 즉, 가상화는 자원 관리 이슈라는 하나의 목적으로 만들어진 것이 아니라 하겠습니다. 참고하시기 바랍니다.
도스시절은 애플리케이션에게 많은 권한을 주어서 프로그램이 문제 생길시 OS가 멈추는 더 큰 문제 발생.
이 때 가상메모리 개념이 등장. 프로세스가 죽어도 OS는 가상메모리인줄 알기 때문에 실제 메모리 회수가능. 낭비도 없고 OS 손상도 없다.
가상메모리가 단순히 자원을 폭넖게 사용하기 위해 쓰는게 아니라 안전하게 사용하기 위함이 첫번째 이유였군요.
오늘도 좋은 영상 잘보고갑니다!
네, 맞습니다. 여러 가지 장점이 있습니다. 피드백 감사합니다. ^^
가상매모리 강의 너무 좋았습니다 역사랑 같이 설명해즈니까 이해가 더 잘됩니다 개발자님 근데요
이전 영상애서 80386시대에서는 프로세스1이쓰고 있으면 프로세스2가 실행 못한다고 했잖아요 그롬 가상매모리에 의해서 멀티테스킹이 가능 한건가요??
그리고 윈도우가 리눅스에비해서 여전히 메모리 회수를 잘 못한다는데 사실인가요??
그런 가정은 윈도우 기준입니다. 그 당시 하드웨어적으로는 멀티태스킹이 가능했으나 MS-DOS가 그런 부분을 적절히 활용하지 못하고 있었던 것으로 알고 있습니다. 그리고 메모리 회수에 관해서는 그렇지 않습니다. 과거 Windows NT 시절에 그런 이야기가 있었으나 이후로는 사라졌습니다. 참고하시기 바랍니다. :)
다른 책에서 가상메모리는 고정크기의 페이지로 나눠서 물리 메모리에 연결하니 어쩌구저쩌구 하는거 보다가 여기서 안썻을때랑 비교해서 설명들으니 이해하기가 휠씬 쉽네요. 감사합니다 :)
좋은 평가와 피드백 감사합니다. 간략히 개념을 이해한 후 깊은 이론을 다시 보면 훨씬 쉽게 접근할 수 있을 겁니다. ^^
안녕하세요! 가상메모리의 최대 장점이 프로세스에 특정 부분을 메모리에 올렸을 때, OS가 그 위치를 알고 있어서 관리가 용이하다고 이해했습니다. (이게 아마 page table을 의미하는 건가요?)
그렇다면 만약 가상메모리를 사용하지 않았을 경우에는 OS가 해당 프로세스의 메모리 주소를 모르기에 프로세스가 죽었을 경우 문제가 되는 건가요?
네, Page table 맞습니다. 가상 메모리 시스템을 비롯해 OS가 메모리 및 전산자원 관리를 직접하지 않으면 응용 프로그램이 만든 메모리 손실을 해결 할 방법이 없습니다. 참고하시기 바랍니다.
두 번째 보러왔습니다 ㅎㅎ 너무 잘 이해가 되네요! 한 가지 궁금한 점이 만약 어떤 PC의 총 RAM이 8GB라고 한다면, 해당 PC에 수많은 프로세스들이 돌아가고 있을 것이고, 그러면 각 프로세스당 가상메모리 공간이 할당되는 것이잖아요? 물론 대부분의 프로세스가 메모리를 매우 많이 사용하지는 않겠지만.. 그냥 단순무식하게 생각했을 때.. 8GB 라는 용량을 PC 위에서 돌아가는 수많은 프로세스들이 나누어 가져 쓰되, 나누어 가져 쓰는 각 공간(VMS)은 서로 독립되어 있다! 라고 이해하면 될까요!?
네, 정확히 맞습니다. 영상에 있는 내용을 첨언하자면...
모자란 RAM 8GB 영역을 HDD로 채웁니다. 어쨌든 프로그램이 돌아는 갑니다만 심각할 정도로 느려집니다. 참고하시기 바랍니다. :)
@@nullnull_not_eq_null 답변감사합니다! 그 모자란 영역을 hdd로 채우는 것이 메모리 스왑이라고 부르는 것 맞을까요!?(이전에 널널님 영상에서 본 것 같아서요)
이래서 가상화 가상화 하는거군요...
자원회수 커널은 다 알고 있었네요 ㅎㅎ
감사합니다.
😂
지금은 그 가상화 수준이 더 높아졌습니다. ASLR이 적용되면서 파일 시스템일부와 레지스트리 일부까지 가상화 하지요. ^^
@@nullnull_not_eq_null 개발자님! 혹시 ASLR이 어떤 연결고리로 파일 시스템일부 및 레지스트리 일부가 가상화 되는지 궁금합니다!
ASLR이 가상메모리에서 랜덤으로 메모리 주소를 할당하면서 보안적으로 안전성을 확보할수 있기 때문에 효율적인 면에서 가상화를 진행하는 걸까요??..
@@sml3592 간단합니다. 파일 및 레지스트리 입출력 API에 대한 시스템 콜 함수의 코드를 수정해 실제 HDD나 레지스트에 정보를 쓰지 않고 다른 메모리나 임시파일에만 쓴 다음 쓰기나 읽기 성공한 것으로 함수가 반환하면 됩니다. 물론 나중에 OS가 변경된 것을 실제 레지스트리나 파일에 반영을 해주거나 반대로 몽땅 날려버리면 모든 것이 그 전으로 돌아가지요.
@@nullnull_not_eq_null 답변 너무 감사합니다. 개발자님의 영상을 보면서 새로운 관점에서 얘기를 듣고 이해하다보니 이젠 용어나 새로운걸 배울수록 등장배경과 동작원리가 궁금해지네요. 다시한번 감사합니다
가상메모리를 안쓰고 램과 하드를 직접 쓰다가 죽었을때 그 영역을 회수하는 방법은 안되나요? cs 문외한의 시선에서 봤을때는 가상메모리라는 개념을 써서 관리하나 그냥 os 가 직접 쓰던 메모리 기억해서 컨트롤하는거나 같은거 아닌가란 생각이 들어서 궁금해 질문해 봅니다...
네, 안 됩니다. OS를 제작 하거나 OS가 DOS처럼 작동하면서 아무런 제어권을 행사하지 않는다면 모르겠지만 가상메모리를 지원하는 OS환경에서 특정 User mode 프로그램이 물리메모리에 직접 접근하는 것은 허용되지 않습니다. 임의 접근을 시도할 경우 프로그램이 소위 죽습니다.
안녕하세요 대표님 아직 여기 까지 오지는 않앗는데 요즘 데이터베이스 튜닝 책을 보는데 여기에 공유메모리라는 개념이 나오더라구요. 가상메모리랑 관련이 있나요?
네, 관련이 있습니다. IPC를 위한 공유 메모리는 모두 가상 메모리 시스템을 이용해 구현됩니다.
@@nullnull_not_eq_null 정말 제 인생에서 제일 중요한 순간에 좋은 강의를 만낫군요. 답변 감사합니다.
그렇다면 다행이네요. ^^
최근 영상보고있는데 좋은 영상 너무 감사드립니다. 다른 영상들도 모두 잘보고있습니다 ^^
좋은 평가와 피드백 감사합니다. 열공하시고...막히는 부분 있으면 질문 올려주세요. ^^
안녕하세요 선생님!
다름이 아니라, 가상 메모리가 없던 시절엔 물리 메모리보다 큰 프로세스는 로드될 수 없었나요?
가상 메모리는 없지만 페이징 기법이 사용되어 물리 메모리보다 큰 프로그램이 로드될 순 없었나요?
프로세스가 메모리보다 큰 경우는 없고 프로세스가 작동하기 위해 필요했던 메모리가 RAM 최대 크기를 넘어가는 일은 늘 있어왔습니다. 그 시절엔 결국 로드된 기존 데이터를 내리고 덮어써서 작동했습니다. 그전 데이터를 읽으려면...다시 로드 해야 했지요. 심지어 FDD로... ^^;;
답변 감사합니다. 이전 질문과 연관해서 두 가지 더 여쭤봐도 될까요?
가상 메모리 이전에도 그렇게 덮어씌우면서까지 로드했다면 왜 많은 교재에서 ‘가상 메모리는 물리 메모리보다 큰 프로그램을 실행할 수 있게 만든다’라고 할까요? 말씀하신 방식대로라면 가상 메모리가 없어도 충분히 가능할텐데요.
두 번째로 가상 메모리를 도입했을때 페이지 폴트가 발생하면 보조 메모리로부터 필요한 명령어와 데이터를 주 메모리로 로드할텐데 왜 가상 메모리 도입 이전보다 속도적으로 이점이 있다고 하는걸까요?
@@googoo-uh6rn 대량 DB 서버를...사용자가 요구가 늘어날 때마다 관리자가 핫스왑 HDD를 넣었다 뺐다 할 수 있을까요? ^^;;;
큰 메모리를 사용하는 프로그램을 로드할 수 있다는 것이 그것을 '참아줄만 하다'는 아닐 수 있다는 점을 생각하시면 되겠습니다.
그리고 페이지 폴트는 잘못된 접근에 해당하지요 허용되서는 안 됩니다. 그리고 보통의 경우 실행 코드를 페이지 아웃 하지는 않습니다. 프로세스가 사용하는 데이터 메모리를 페이지 아웃하지요. 참고하시기 바랍니다.
안녕하세요!
그러면 가상메모리는 제한이 거의 없는데 스텍오버플로우는 왜 생기는 건가요?
스택의 크기는 컴파일러 설정에 따라 다를 수 있는데 변경하지 않는다면 보통 1MB로 제한됩니다. 참고하세요.
가상메모리를 쓰는 이유는 프로그램이 물리 메모리의 제약에서 벗어나 더 많은 프로세스를 사용하고 CPU 이용률과 처리률을 높이는 것이 메인인 줄 알았는데, 이 강의에서는 메모리의 독립성과 회수성을 중점으로 설명하셔서 많이 부족함을 느낍니다...
좋은 평가와 피드백 감사합니다. 이제는 두 가지 관점이 생겼으니 잘 된 일이 아닌가 싶습니다. 다 잘 될겁니다. ^^
좋은 영상 감사합니다!
가상 메모리가 추상화하는 대상이 기본적으로 HDD이고 이를 캐싱하는 것이 RAM이라고 알고 있었는데, 설명하시는 내용을 보니 제가 좀 잘못 알고 있었다는 생각이 듭니다! 가상메모리는 RAM과 HDD를 한꺼번에 추상화하는 것일까요? 혹은 추상화의 단계가 따로 있는 것일까요?
네, 둘을 합쳐 하나로 추상화 합니다. 가상 메모리는 HDD를 메모리로 추상화 하는 것은 아닙니다. 그리고 프로세스가 연산 중에는 당연히 RAM을 써야 연산이 빠릅니다. 모든 관리는 운영체제의 몫이죠. 열공하세요~~~! ^^
@@nullnull_not_eq_null OS공부를 해야겠군요! 영상도 잘 챙겨보겠습니다 친절한 답변 정말 감사드립니다!
네, 맞습니다. OS공부 꼭 하시기 바랍니다. 건투를 빕니다! ^^
어릴때 관심있던 이야기들~
지금은 다른일을 하고있지만^0^
잘 듣고 보고 재미나네요
정보를 얻는다는건 항상~좋은 >_
피드백 감사합니다. 비록 다른 일을 하고 있다해도...마음 한구석에 아쉬움은 있으신 모양입니다. (조심스레 추정해봅니다. ^^) 앞으로도 영상 열심히 올리겠습니다. ^^
감사합니다 !
- 가상메모리를 통해서 메모리 낭비가 일어나지 않는다 (전산자원의 효율화)
- 가상메모리 덕분에 ctrl+alt+f4가 많이 없어졌다 ...
정리와 피드백 감사합니다. 재부팅 단축키는 Ctrl + Alt + Del 입니다. 참고하세요. ^^
감사합니다~! 너무 잘 들었습니다!
좋은 평가와 피드백 감사합니다. ^^
무려 오늘 업로드 ;; 이건 못참쥥
오늘도 열공하세요~~~! ^^;;;
😄
1빠
거의 대부분 1등으로 달려오시네요. 늘 감사합니다. ^^