안녕하세요, 좋은 운영체제 강의 감사드리며, 수강 중 한가지 의문점이 생겨서 질문드립니다. LRU Least Recently Used 는, 최근에 가장 사용이 적은 페이지를 선택하는 방법이라고 설명해주셨습니다. 그렇다면 가장 오랜 기간 사용하지 않은 페이지를 교체하는 방법에 해당되는 것으로 보이는데, 4:40 그림과 함께 설명되는 부분은 (최근에 들어온 페이지의 참조 수를 계산한다고 설명 주신 부분은) 계수-기반 페이지 교체 Counting-Based Page Replacement 에서 참조 횟수가 가장 작은 페이지를 교체하는 방법인 LFU Least Frequently Used 방식에 해당하는 설명이 아닌가 생각됩니다. 오랜기간 사용하지 않은 페이지를 교체 한다면, 예시의 마지막 LRU 교체는 "D" 에서 이루어져야하는 것이라 판단됩니다.. 감사합니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Page Fault 과정 1. 어떤 명령어가 유효한 가상주소에 접근했으나 해당 페이지가 만약 없다면 트랩이 발생되어 운영체제에 알리게 됩니다. 2. 운영체제는 실제 디스크로부터 사용하지 않은 프레임을 찾습니다. 3. 해당 프레임을 실제 메모리에 가져와서 페이지교체알고리즘을 기반으로 특정페이지와 교체합니다. (이 때 스와핑이 일어납니다.) 4. 페이지테이블을 갱신시킨 후 해당 명령어를 다시 시작합니다. 이렇게 되어있는데 2번에서 OS가 Disk에서 빈 frame을 찾는게 아니라 Memory를 보고 빈 Frame이 있으면 Disk에 필요한 Frame을 가져오고 빈 Frame이 없으면 Page 교체 알고리즘을 통해 스와핑하는것 아닌가요?
안녕하세요? 이번 챕터 강의를 듣다가 실제 실행되는 프로세스들이 실제로는 메모리를 연속적으로 사용하는지 불연속적으로 사용하는지 궁금해서 질문드리게 되었습니다. 이전에는 {힙 스택 데이터 코드} 모델을 보여주셔서 연속적이라고 생각하고 있었는데요, page와 segmentation 모델 보면 불연속적이라는 생각이 들었습니다. 단순 관점의 차이인가? 싶어서 질문드립니다!
메모리 오버레이와 스와핑에 대해 찾아 보다가 제목과 같은 기술들을 알게 됐습니다. 영상에서는 메모리 오버레이= 프로그램을 쪼개 RAM과 2차 메모리에 나눠 담기 , 스와핑= 필요할 때마다 2차 메모리에 있는 프로세스 조각과 RAM에 올라가 있는 조각 바꿔치기 로 설명하셨습니다. 근데 더 찾아보니 오버레이도 수동/자동이 있다는 것, 또 스와핑과 비슷해 보이는 Dynamic Loading, Dynamic Linking이라는 것도 발견했습니다. 깔끔하게 정리된 자료가 없어서 정리해 주시면 너무 감사할 것 같습니다.
이전 강의에서 "SJF 알고리즘은 각 프로세스의 CPU Burst Time을 예측하기 매우 어렵다."고 하셨는데, 최대 요구 CPU 리소스 예측도 CPU Burst Time 예측과 다른 게 없지 않나 생각하거든요. 그런데 여기선 "예측한 최대 요구 CPU 리소스 이상은 절대 안 쓴다!"라고 단정짓고 진행된 것 같아서 뭐가 다른 건지 궁금합니다. 그리고... 이건 제가 공부를 제대로 안 한 건지 모르겠는데요. 한 프로세스에는 그 프로세스가 쓸 프로세스만큼 맨 처음에 할당받고 Waiting으로 넘어가는 거 아니었나요? 생성 시점에 코드랑 데이터를 보면 이 프로세스에 얼만큼 리소스가 필요한지 알 수 있을 텐데... 그러니까 '최대 요구 자원'이라는 개념 자체가 이해가 안 됩니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. === 안녕하세요 감쟈님!! PCB들이 연결리스트로 저장되는 이유가 뭔가요? 분명 이점이 있을것 같아서 연결 리스트 인것 같은데 모르겠어유!!
참고 강의: https://youtu.be/eELCTRdSj7o?list=PLXvgR_grOs1DGFOeD792kHlRml0PhCe9l&t=315 이 질문 의 후속 질문 같은 질문입니다. 아직 가상 메모리를 공부하진 않았지만 프로세스가 바라본 메모리상 주소가 가상 메모리상 주소이기에 실제 주소와 다를 수밖에 없음을 이해했습니다. 근데 이 영상 을 보면 가상 메모리라는 게 RAM+2차 메모리로 이루어지는데, 위 참고 강의에서는 파일 기반 IPC는 OS가 필요한 용량을 할당해줄 때 기준이 느슨한데, 메모리 기반 IPC는 OS가 필요한 용량을 할당해줄 때 기준이 엄청 깐깐하다고 설명하십니다. (몇 시간 전 고정 길이 어쩌고 질문했는데, 영상을 다시 보니 핀트가 이게 아니라 용량 할당의 타이트함이더라구요) 통신 매개체만 다를 뿐인데 왜 이런 차이가 생기는 걸까요? (왜 직접 안 물어 보느냐 하시면... 저 강의 앞 부분을 안 듣고 질문하는 거라 혹여 욕먹을까 봐 그렇습니다 죄송해요ㅠㅠㅠㅠㅠㅠㅠ)
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 고정 분할 방식과 가변 분할 방식의 단점을 최소화한 버디시스템이 최고의 메모리 분할 방식인지 찾아보다 페이징 기법을 알게되었는데 페이징 기법의 방식이 고정 분할 방식과 유사한점이 많은거 같아 고정 분할 방식은 메모리를 나눈 후 프로세스를 맞춰 넣는 방식 페이징은 프로세스를 나눈 후 메모리에 퍼즐처럼 넣는 방식 이렇게 요약이 되었는데 강의영상 2:47초쯤에 말씀해주신 프로세스C를 예로들면 고정 분할방식은 메모리를 나누고 프로세스는 나누지 않기때문에 할당이 불가능한데 해당 영상은 프로세스 C가 나눠지면서 할당되는걸 보면 해당 기법은 페이징 기법을 사용한건가요???
다른 분도 유사한 질문을 남겼지만 해당 답변으로 의문이 해소되지 않아 질문 남기는 점 양해바랍니다. 메모리맵 IO 는 메모리와 입출력장치가 같은 주소공간을 사용하기 때문에 메모리의 주소공간이 줄어들고 고립형은 그렇지 않은 것으로 말씀해주셨으나 이해가 잘 되지 않습니다. 10비트 운영체제를 사용한다고 가정하면 이 운영체제는 1024개의 주소공간을 다룰 수 있는 것으로 알고 있습니다. 이때 고립형 IO라고 하더라도 1024개 중 일부를 입출력장치를 위한 주소공간으로 사용하게 되면 당연히 그만큼 메모리를 위한 주소공간이 줄어들 게 되는 것 아닌가요? 메모리맵 IO와 이 점에서 왜 차이가 있는 것인지 모르겠습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 세마포어를 사용하는 이유로 공유자원을 동시에 여러 프로세스가 사용하려할때 생기는 오류를 방지하는데 세마포어를 wait(1) 이렇게 1개의 프로세스만 공유자원을 사용할수있다 가정한 후 동시에 여러 프로세스가 공유자원을 사용하려할때 어떤 기준으로 먼저 실행할 프로세스를 선택하나요?
알려주신 내용에 덧붙여서 챗지피티한테도 물어보고 정리해봤습니다 1. 호스트 파일에서 DNS 주소 찾기 2. 없으면 OS & 브라우저의 DNS 캐시 확인 3. 없으면 로컬 DNS 서버(예: ISP DNS) 요청 4. 없으면 상위 DNS 서버 요청 (Root DNS까지 재귀적으로 요청) 5. IP 주소 획득 후 라우팅 수행 6. IP 주소 획득 후 TCP/IP 연결 (3-Way Handshake) 7. 리다이렉트 수행 (필요한 경우) 8. 브라우저 캐시 확인 (304 응답 처리) 9. 프록시 서버 캐싱 확인 (CDN, 로컬 네트워크 캐시) 10. 컨텐츠 다운로드 (HTML, CSS, JS, 이미지 등) 11. 브라우저 렌더링 후 사용자에게 웹사이트 표시 근데 알려주신 강의에는 브라우저 캐싱과 공유 캐싱이 DNS캐시보다 먼저 수행된다고 하니까 어떤게 맞는건지 모르겠네요
강의: FreeRTOS의 절대 우선 순위 시간: 6:14 void task0(void* pdata) 코드를 보면, 오래 걸리는 memcpy 작업 수행 전 vTaskSuspend(NULL) 을 실행하는 데요. 제가 이해한 게 맞는지 좀 봐주세요. 이렇게 수행될 것 같습니다. task0 을 우선 생성/실행한 후, vTaskSuspend(NULL) 호출하여 Blocked 상태로 대기 cdma 인터럽트 발생 시, task0 Ready / Running 상태 전환하여 memcpy 수행. task0 Loop 를 통해, 다시 Blocked 상태로 진입 이런 순서로 진행되는 건가요?
https://dar0m.tistory.com/233 IPC에 대해 가장 잘 정리된 것처럼 보이는 걸 가져왔습니다. 질문 전에 이거 말고 몇 개 더 읽긴 했습니다. 강사님께서 "파일과 파이프를 이용하는 방법"이라 하셨으니, '파일을 이용하는 방법'이라 함은 파이프를 이용하는 방법과 네트워크 통신을 빼면 메시지 큐를 이용한 방법이랑 공유 메모리를 활용하는 방식 둘 중 하나 혹은 둘 다를 말하는 걸로 이해했습니다. 근데 위 링크 정리 부분을 읽어 봐도, https://m.blog.naver.com/demonic3540/221669173818 이걸 읽어 봐도 강의에서 설명한 예시가 Pipe 방식인 것 같습니다. 근데 이러면 또 문제가, 이 섹션? 의 후속 강의에서 Race Condition과 Synchronization 방법론이 나오는데... 파이프 방식은 애초에 최대 쌍방향 통신이라 동기화가 필요할 일이 공유 메모리 방식보다 훨 적은 것 같아서... 사실상 공유 메모리 방식 통신을 전제로 하신 게 아닐까 생각했습니다. 암튼 좀 혼란스러워서 정리해 주시면 좋겠습니다.