가상 메모리와 페이징 시스템에 대해 구체적으로 설명해주세요
가상 메모리는 한정된 메모리를를 여러개의 프로세스가 동시에 사용할 수 있수 있게 프로세스의 가상주소에 데이터를 읽거나 쓸때만 물리주소로 바꾸어서 사용하는 것을 뜻합니다.
CPU에서는 가상주소만 인식하고 요청하면 MMU가 물리주소로 변환하여 실제 데이터에 접근 하는 방식으로 동작합니다
페이징 시스템은 가상 주소를 고정된 크기에 페이지로 구분하여서 메모리에 데이터를 페이지 단위로 읽고쓰는 것을 뜻합니다. 페이징을 통해 cpu에서 데이터를 요청햇을때 메모리에 접근해야하는 횟수를 줄여주어서 효율적으로 동작할수 있게 합니다.
또한 페이지는 가상주소와 물리주소를 매핑하는데 사용됩니다. 이러한 매핑된 정보는 페이지 테이블에 담겨서 cpu가 요청한 가상주소를 MMU가 물리주소로 변환하여 해당 메모리에 접근할 때 사용됩니다
요구 페이징과 페이지 폴트에 대해 구체적으로 설명해주세요
요구 페이징은 프로세스의 모든 데이터를 메모리에 적재하지 않고 실행 중 필요한 시점에서만 메모리로 적재하는 것을 의미합니다. 프로세스 실행시 항상 실행되는 코드의 앞부부만 적재하고 나머지는 cpu가 처리할때 메모리에 올리는 방식으로 적용됩니다
페이지 폴트는 요구 페이징기법을 사용하기 때문에 cpu가 어떤 데이터를 요청했을 때 해당 데이터가 실제 물리 메모리에 없는 상황에 발생하는 인터럽트를 의미합니다.
페이지 폴트가 발생하면 운영체제가 해당 페이지를 물리메모리에 올리고 페이지 테이블을 업데이트 합니다. 이후에 cpu에서는 해당데이터에 대해 다시 요청을 하게 됩니다.
MMU와 TLB에 대해 구체적으로 설명해주세요
MMU는 CPU에서 요청한 가상주소를 해당 프로세스의 페이지 테이블에서 찾은뒤 매핑된 물리주소를 통해 메모리에 접근하여 CPU가 요청한 데이터를 전달하는 역할을 합니다.
TLB는 페이지 정보를 담고있는 캐쉬로써 MMU는 cpu에서 데이터를 요청받을시 먼저 TLB에서 해당하는 물리주소가 있는지를 찾게 됩니다 TLB에 페이지정보가 있다면 바로 해당 물리주소로 접근하고 페이지 정보가 없다면 페이지 테이블로 접근하여
물리주소를 취득한후 TLB를 업데이트하고 다시 물리주소에 접근하게 됩니다.
풀이
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Solution {
public String[] solution(String[] strings, int n) {
Arrays.sort(strings);
List<String> list = new ArrayList<>(Arrays.asList(strings));
for (int i = 0; i < list.size()-1 ; i++) {
if (list.get(i).charAt(n)>list.get(i+1).charAt(n)) {
list.add(i+1, list.remove(i));
i=-1;
}
}
return list.toArray(new String[0]);
}
}