목록분류 전체보기 (282)
내 잡다한 노트
CPU에 있는 캐시는 메모리에서 데이터를 가져와 옳게 가져오면 캐시 히트, 맞지 않는 것을 가져오면 캐시 미스를 한다.캐시도 가상메모리처럼 매핑하는 기법이 비슷하다. 그러나 캐시는 메모리보다 작기 때문에 항상 메모리의 일부 페이지만 가지고 있다. 그래서 의미하는 바가 다르다. 캐시 직접 매핑 직접 매핑에서는 메모리의 페이지 수 N을 캐시의 페이지 수 M으로 나누고 이를 블록이라고 한다. 메모리의 페이지 수 N = M * 블록의 수가 된다. 직접 매핑에서는 메모리의 블록이 캐시로 올라올 때 항상 같은 위치로 올라온다. 블록의 첫 번째 페이지는 캐시의 첫 번째 페이지에만 올라오게 된다. 일정 위치에서 올라오기 때문에 메모리의 어떤 블록에서 올라오는지만 알면 된다. 그 블록 번호를 태그라고 한다. 장점은 메모..
메모리 접근 권한 메모리의 특정 번지의 데이터를 사용할 수 있는지에 관한 권한을 뜻한다. 읽기 쓰기 추가 실행이라는 4가지 권한이 존재한다. 쓰기 권한이 없으면 추가 권한도 없기 때문에 총 8가지의 권한이 있다 디테일하게 생각하면 6가지이다. 프로세스 구역내 메모리 접근 권한 코드 영역에선 읽기 실행만 된다. 자기 자신의 코드를 프로세스는 수정할 수 없기 때문이다. 데이터 영역은 읽고 쓸수있다. 하지만 상수 데이터는 쓸 수 없다. 메모리 접근 권한에 대한 검사는 가상 주소에서 물리주소로 변환을 할 때 매번 일어난다. 만약 권한이 없는데 접근한다면 트랩 오류를 일으킨다. 세그먼테이션-페이징 혼용 기법 말그대로 세그먼테이션과 페이징의 장점을 혼합했다. 프로세스들은 어떤 데이터에 대해 어떤 권한을 가지고 있는..
피드백) 계속 시간초과가 났다 분명 맞게 한 것 같은데... 왜 자꾸 시간초과가 나는지... 입력이 백만이라 그런걸까 계속 생각해봤지만 답이 나오지 않아 질문하기란을 살펴보던 도중 나랑 같은 케이스인 분이 계셨다 답글을 읽어보니 visited의 위치가 문제였다. 꺼내면서 visited를 갱신하면 큐에 중복되는 층 들이 계속 쌓여서 큐의 길이가 무지막지하게 커지는 것이다. 그래서 시간초과가 나온 것이다... 앞으론 꺼낼때 visited를 갱신하지 말고 큐에 넣으면서 동시에 visited를 갱신하는 식으로 해야겠다. 오랜만에 해서 감이 떨어졌나보다 ㅋㅋ; 소스코드) from collections import deque totalFloor, ghcurrent, startlinkf, up, down = map(..
가변 분할 방식과 비슷한 기법이다. 프로세스마다 사용하는 메모리 크기가 다르다. 물리 주소나 가상 주소나 각각의 공간을 세그먼트라고 부른다. 이 기법도 테이블이 존재한다. 테이블은 2열로 돼있고 1열은 사용할 수 있는 크기로 limit라고 부른다. 2열은 물리 메모리상의 시작 주소이다. 이 기법도 물리 메모리의 공간이 부족하면 스왑영역을 활용한다. 세그먼테이션의 주소 변환 VA = 로 표현한다. S는 세그먼트 번호, D는 distance이다. 프로세스 a의 32번지에 접근할 때 주소 변환 과정이다. a는 세그먼트 0번과 매핑됐다고 가정한다. VA = 이다. 시작주소는 120일 때, 물리 메모리의 120 + 32 번의 데이터를 구한다. 이때, 메모리 관리자는 거리가 세그먼트의 크기보다 큰지 확인을 한다. ..
페이징 기법이란 물리 메모리에서 고정 분할 방식과 비슷하다. 메모리의 크기를 고정적으로 사용한다 그러다보니 관리가 수월하다. 가상 주소의 분할된 각 영역을 페이지라고 하고 물리 주소의 분할된 각 영역을 프레임이라고 부른다. 둘 다 번호를 매겨 관리한다. 또한 각각의 페이지와 프레임은 크기가 같다. 페이징 매핑 테이블 페이징 기법에서 사용하는 매핑 테이블이다. 여러 할당 기법에 따라 다르지만 보통 프레임 번호가 담긴다. 프레임 번호가 아닌 invalid가 적혀 있다면 그것은 해당 페이지가 스왑 영역에 있다는 것이다. 페이징 기법의 주소 변환 가상 주소는 0번 주소부터 시작한다 페이지의 크기를 20이라고 가정할 때, 45번 주소는 3번 페이지에 있고 3번 페이지는 프레임 5번과 매핑됐을 때 프레임 5번은 1..
여러개의 프로세스를 사용할 때 메모리를 할당하는 방식이 존재한다. 바로 가변 분할 방식과 고정분할 방식이다. 가변 분할 방식은 프로세스를 한 덩어리처럼 프로세스의 크기대로 할당하는 방식으로 연속적이다. 프로세스마다 크기가 다르다보니 사용하던 프로세스가 종료가 돼 메모리에서 나갔을 때, 그 남은 공간보다 다음에 들어온 프로세스가 더 크다면 메모리에 들어가지 못하게 되고 그 남은 공간은 낭비가 된다. 이것을 외부 단편화라고 한다. 이 외부 단편화를 해결하기 위해선 조각 모음을 통해 사용중이던 프로세스를 잠시 중단하고 앞으로 이동시켜 남은 공간을 없애준다. 이런 외부단편화같은 것때문에 메모리를 관리하는게 복잡하다 조각모음처럼 부가적인 작업이 필요하기 때문에 조각 모음 말고도 외부 단편화 문제를 해결하기 위한 ..
메모리 오버레이 overlay 겹겹이 쌓는다는 뜻을 가졌다. 메모리는 하드디스크처럼 큰 용량을 가지지 못한다. 가지게 하려면 비싸기 때문에. 메모리보다 큰 프로세스를 실행하려한다면 메모리에 다 안들어가서 실행이 안될 것이다. 그걸 방지하기 위해 프로세스를 쪼개서 메모리에 넣는 것을 메모리 오버레이라고 한다. 겹겹이 쌓는다는 overlay를 사용한 이유는 프로세스를 잘라 겹겹이 쌓아서 사용하니까 그런듯. 프로그램을 몇 개의 모듈로 나누고 필요할 때마다 모듈을 메모리에 가져와서 사용한다. 어떤 모듈을 가져오거나 내보낼지는 프로그램 카운터가 결정한다. 메모리 오버레이 덕분에 프로그램의 일부분만으로도 실행이 가능해진다. 스왑 메모리 공간이 꽉차서 사용을 잠시 안하는 프로세스는 계속 메모리에 남아있게 되면 메모리..
CPU의 비트는 데이터가 한 번 이동할때 다룰 수 있는 최대 크기를 의미한다. 그래서 CPU와 관련된 부품들은 이 비트와 연관이 깊다. 레지스터나 ALU도 32비트라면 32비트를 처리할 수 있도록 설계가 된다. 32비트 CPU의 경우 메모리 주소 레지스터도 32비트까지 다룰 수 있기 때문에 CPU가 다룰 수 있는 메모리의 최대 크기가 2^32인 4GB가 된다. 물리 주소 공간 : 하드웨어 입장에서 바라본 주소 공간 논리 주소 공간 : 사용자 입장에서 바라본 주소 공간 메모리 영역의 구분 0번 주소부터 ~번 주소까지가 운영체제의 영역이고 그 이후부터는 응용 프로그램의 영역이다. 절대주소는 실제 메모리 주소를 뜻하고 상대주소는 어떤 기준이 되는 주소가 있고 그 주소에서 상대적인 위치 차이를 나타낸다. 운영체..