20210117-TIL

나영원·2021년 1월 18일
0

T.I.L.

목록 보기
113/145

공부할 내용

  • 알고리즘 복습 및 과제
  • 운영체제 복습 및 과제
  • TiL 정리 및 Git & 블로그 업데이트

오늘 공부한 것 & 배운 내용

운영체제 복습 및 과제

과제 답변

  1. 가상 메모리와 페이징 시스템에 대해 구체적으로 설명해주세요
    가상 메모리는 한정된 메모리를를 여러개의 프로세스가 동시에 사용할 수 있수 있게 프로세스의 가상주소에 데이터를 읽거나 쓸때만 물리주소로 바꾸어서 사용하는 것을 뜻합니다.
    CPU에서는 가상주소만 인식하고 요청하면 MMU가 물리주소로 변환하여 실제 데이터에 접근 하는 방식으로 동작합니다

    페이징 시스템은 가상 주소를 고정된 크기에 페이지로 구분하여서 메모리에 데이터를 페이지 단위로 읽고쓰는 것을 뜻합니다. 페이징을 통해 cpu에서 데이터를 요청햇을때 메모리에 접근해야하는 횟수를 줄여주어서 효율적으로 동작할수 있게 합니다.
    또한 페이지는 가상주소와 물리주소를 매핑하는데 사용됩니다. 이러한 매핑된 정보는 페이지 테이블에 담겨서 cpu가 요청한 가상주소를 MMU가 물리주소로 변환하여 해당 메모리에 접근할 때 사용됩니다

  1. 요구 페이징과 페이지 폴트에 대해 구체적으로 설명해주세요

    요구 페이징은 프로세스의 모든 데이터를 메모리에 적재하지 않고 실행 중 필요한 시점에서만 메모리로 적재하는 것을 의미합니다. 프로세스 실행시 항상 실행되는 코드의 앞부부만 적재하고 나머지는 cpu가 처리할때 메모리에 올리는 방식으로 적용됩니다

    페이지 폴트는 요구 페이징기법을 사용하기 때문에 cpu가 어떤 데이터를 요청했을 때 해당 데이터가 실제 물리 메모리에 없는 상황에 발생하는 인터럽트를 의미합니다.
    페이지 폴트가 발생하면 운영체제가 해당 페이지를 물리메모리에 올리고 페이지 테이블을 업데이트 합니다. 이후에 cpu에서는 해당데이터에 대해 다시 요청을 하게 됩니다.

  2. 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]);
            }
    }
    • ''인덱스 1의 문자가 같은 문자열이 여럿 일 경우, 사전순으로 앞선 문자열이 앞쪽에 위치합니다." 이 조건을 어떻게 만족시키는게 너무 어려웠던 문제이다
      • 아무생각 없이 풀기 시작해서 먼저정렬부터 하자고 생각하며 n까지의 문자를 날리고 정렬부터 했는데 그렇게 접근한게 더 어렵게 만든것같다
      • 어느정도는 문제의 전체적인 방향을 정해놓고 풀어야지 무작정 앞에것 부터 풀다가는 더 돌아갈수도 있겠구나라는걸 느꼈다
    • 한번 순서가 바뀌면 0부터 다시 탐색하는데 그부분이 비효율적이지 않나 고민이 되는 부분이다
    • 그래도 자력으로 풀수 있어서 기분이 굉장히 좋았다

내일 공부할 내용

  • 알고리즘 문제 풀이
  • 스프링 수업 복습
  • TiL 정리 및 Git & 블로그 업데이트
profile
배우는 개발 일기

0개의 댓글