major loop - minor loops 방식의 버블 메모리가 있다고 칩시다.
저기 아래 있는 가로타원이 major loop이며 세로타원 6개는 minor loops입니다. 이 마이너 루프들의 같은 위치에 있는 버블들을 묶어서 1페이지라고 부릅니다. (기억 안 나시면 제가 예전에 써둔 버블 메모리 n부작 읽으시면 됩니다)
컴퓨터니까 보통은 2의 제곱 형태로 페이지를 사용합니다. 64비트, 128비트, 256비트 이렇게요. 페이지를 한장한장씩 불러올수도 있고 연달아서 불러올 수도 있지만, 원리는 같습니다.
일단 그림처럼 최대 6비트 페이지를 사용할 수 있는 버블 메모리가 있다 칩시다. 그럼 왜 6비트(마이너 루프 6개)냐? 불량 마이너 루프들이 반드시 껴 있기 때문입니다. 불량 루프를 대체할 수 있게, 아니면 bootstrap loop나 페이지 어드레스 저장용으로 사용할 수 있게, 보통은 루프의 여유분을 만들어둡니다. 512비트페이지를 사용할 수 있는 버블 메모리면, 루프는 584개쯤을 만들어 둡니다. 584개 루프 중에 불량 루프가 20개쯤 있더라도 나머지를 쓰면 되죠.
암튼, 저 버블 메모리의 2번째와 4번째 루프는 불량입니다. 불량 루프는 루프 저장용량의 한계만큼 버블이 들어차지 않거나루프가 이루어지지 않아 쓰면 안 됩니다. 사용자는 이 루프를 마스킹해야 하는데, 이러려면 저 위의 사진과 같은 방법을 씁니다. 6개의 클럭 주기(1주기당 버블 하나) 중에 2번째와 4번째 클럭 주기를 무시하는겁니다. 그러면 버블 데이터를 수신하는 컨트롤러는, 클럭에 맞춰 일렬로 주욱 늘어서서 빠져나가는 버블 중 2번째와 4번째 버블은 무시하게 됩니다. 버블 메모리에서 나가는 데이터를 찍어보면 1페이지 6개 cycles에 6비트이지만 컨트롤러가 사용하는 데이터는 4비트가 되는 겁니다.
이 에러맵은 메모리 겉표면에 있습니다. *은 0000을 나타내고 4개 마이너 루프 묶음이 모두 정상이란 소리입니다. 그 오른쪽에 C가 있네요. C는 1100으로 4개 마이너 루프 묶음 중 첫번째와 두번째 것이 불량이란 소리입니다.
이 에러맵은 외부 롬에 기록할 수도 있고, 버블 메모리에 내장된 bootstrap loop에 저장할 수도 있습니다. 외부 롬에 기록하면 컨트롤러가 그걸 참조해서 마스킹하고, bootstrap loop에 기록하면 시스템 부팅 시 이 데이터가 RAM으로 올라가 컨트롤러는 이걸 참조해서 마스킹을 해 데이터 버스를 통해 CPU로 데이터를 올립니다.
말은 어려워도 동영상같은 걸 보면 쉬운데, 그걸 못 만들겠네요.