전체 글 77

[OS] 운영체제 Virtual Memory Management

어떻게 하면 가상메모리를 잘 관리하여 가상메모리 시스템 성능을 '최적화'를 시킬수 있는지 알아보자! 지금부터 말하는 기법은 paging 기법을 토대로 말할것, segmentation도 가상메모리 관리 관련해선 동일하기에.. 가상메모리의 Cost model 가상메모리의 성능을 높이기 위한 지표로는 다양한 것이 있지만 그중 가장 대표적인 Page fault frequency(발생빈도) Page fault rate(발생률) 두 가지가 존재한다. (address mapping 공부할때, residence bit가 0이면 page fault로 context switching을 통한 높은 오버헤드가 발생하기에 성능에 영향을 크게 미친다고 알고있다.) 즉, 'Page fault'를 최소화 하는 것이 가상메모리의 성능..

computer science 2021.09.19

ec2에 mysql server를 이용해서 spring boot서버를 배포해보자.

안녕하세요. 다들 aws의 RDS제품을 이용해서 DB서버를 구축하지만, 저는 하나의 인스턴스에 mysql 서버와, spring boot서버를 배포해 보겠습니다. 글이 많이 없기도하고, 특히 ./gradlew build시 발생하는 에러를 해결하기 위해 삽질을 많이해서 해결법 등을 적어볼게요. ec2에 인스턴스 만들기 저는 unbuntu 18(프리티어) 인스턴스를 만들었구요! 보안규칙은 ssh는 왠만하면 본인 ip로하구, http, https는 anywhere로 하였습니다! 이 과정은 너무간단하기에 생략합니다.(모르시면 생활코딩을 참고하세요!) ubuntu 18에서 mysql-server 설치하구 외부에서 mysql-server에 접속하기 sudo su 를 통해서 슈퍼유저로 접속합니다. apt-get upd..

개발 2021.09.16

[객체지향의 사실과 오해] 6. 객체지도

지도는 변경될수 있는 세세한 건물의 이름, 마트 정보등을 나타내는 것이 아닌 잘 변하지 않는 안정적인 지형 정보를 기반으로 되어있다. 그렇기에 지도는 예전부터 많이 변한것이 없고, 우리는 이 지도를 통해서 목적지까지 어렵지 않게 갈수 있다. 지도는 안정적인 지형 정보를 기반으로 만들었기에 예전 지도가 지금까지도 사용이 가능한 것이다. 시간이 지나면 아이스크림 가게가 신발가게로 금방 변하고, 건물이 사라지기도 한다. 그러나 지형정보는 잘변하지 않는다. SW도 사용자의 요구사항은 안타깝게도 자주 변한다. 그렇기에 요구사항에 맞춰서 설계를 하면 금방 설계를 뒤엎어야 할것이다.(바뀔 수도 있기에, 아니 무조건 바뀐다.) 우리는 지도와 마찬가지로 구조를 중심으로 먼저 설계하고 그 위에 기능을 넣어야한다. 그러면 ..

study with book 2021.09.13

백준 2156(JAVA)

문제 풀이 이 문제는 dp문제로, 바텀업(반복문)을 통한 메모이제이션으로 풀수 있습니다. 큰 문제를 작은문제로 나누는데 항상 결과가 같기 때문입니다.(반대로 큰문제를 풀기위해 작은문제를 사용하는 것이 문제가 없다라고 생각해도 좋습니다.) 무슨말이냐면, 미지의 번호인 i번째에 포도주를 먹는데 i - 1, i - 2 ...이전의 포도주를 먹는 최대값이 사용될수 있다는 의미입니다. 저는 항상 dp문제를 보면 미지의 번호인 i번째의 최대값을 구하는데 어떤 이전의 값들이 사용될까를 생각합니다. 이 문제는 '연속된 세개의 포도주를 먹을수 없다'라는 제한조건만 잘생각해보면 됩니다. i - 3i - 2i - 1i 안먹음먹음먹음 안먹음먹음 안먹음 그렇다면 이런식으로 세가지 경우로 나눌수 있습니다. 표에 입..

algorithm 2021.09.09

백준 1932(JAVA)

문제 풀이 맨 위에서부터 한 레벨씩 내려가면서, 왼쪽 아래, 왼쪽 오른쪽의 합을 더하며 dp 테이블에 값을 저장하면 된다. 높이는 최대 500이고, 내려가면서 현재 높이의 개수 * 2만큼 탐색하므로(2 + 4 + 6 + 8 + ... + 1000) 시간초과 날 걱정은 안해도된다. 물론 문제에서 풀라는 것과같이 이미 값이 있으면 최대값으로 dp 테이블을 갱신해 나가며 풀면된다. 반복문을 이용한 bottom up으로 dp테이블에 값을 적어가며 메모이제이션을 구현했고 해당 메모된 값을 계속 업데이트하며 문제를 풀었다. 나는 ArrayList를 이용했다. 코드 package baekjoon.DP; import java.io.BufferedReader; import java.io.IOException; impor..

algorithm 2021.09.07

백준 16236(JAVA)

문제 풀이 단순 bfs만으로 상하좌우 방문의 순서를 정해준다해서 같은 거리에 가장위쪽, 가장왼쪽의 먹이를 먹는다는 보장이 없다. 이 아이디어를 떠올리지못해 단순 bfs탐색 순서만으로 (위 -> 왼쪽 -> 오른쪽 -> 아래) 고집하여 풀다보니 문제를 푸는데 삼일을 소요했다. 왜 안될까? 직관적으로는 될거같지만, 현재 같은거리의 먹이를 기준으로 하지 않고 nextX, nextY의 위치를 기준으로 위 왼쪽 오른쪽 아래를 탐색하므로 잘못되었다. 현재 current 위치를 기준으로 먹을수있는 먹이중 가장 가까우면서 가장 위에있고 가장 왼쪽에있는 한먹이를 골라야한다. 그렇게 하기 위해선 일단 현재 위치에서 Queue를 이용해 그래프를 탐색하며(BFS) 먹을수있는 먹이를 모두 List에 넣는다. 그다음 List에서 ..

algorithm 2021.09.03

[OS] 운영체제 Virtual Memory

continuous memory allocation은 프로세스가 연속적으로 메모리에 적재되는것을 의미한다. 그와는 다르게 프로세스가 연속적으로 메모리에 적재되지 않을수도 있다. 이를 Non-continuous memory allocation이라한다. 프로세스가 연속적으로 메모리에 할당되지않고 블럭단위로 여러개로 쪼개서 할당될수 있다면 메모리를 더 효율적으로 사용할수 있을것이다. 그리고 사용되지 않는 블럭(프로세스를 블럭단위로 여러개 나눈것)은 swap device(disk)에 저장하니 메인메모리만 사용할때 보다 더 큰 용량을 관리할수 있다. Non-continuous memory allocation을 통해서 가상메모리라는 개념이 존재한다. 좀더 자세히 알아보자. Virtual Memory(Storage)..

computer science 2021.09.02

백준 2879(JAVA)

문제 풀이 그리디 알고리즘으로 문제자체 푸는법은 어렵지않으나 나는 너무 안일하게 생각했던 나머지 2번 틀렸다. 그리디 알고리즘 자체가 '이 문제는 그리디 알고리즘으로 푸는 것이다'라는 것을 깨닫는게 어려운거지, 깨닫고나면 푸는법은 어렵지 않은 것 같다. 하나의 편집은 연속된 줄을 그룹으로 탭을 하나 추가하거나 삭제할수 있다. 이 편집의 횟수를 최소화하라는 문제이다. 일단 입력되는 두줄의 차이를 먼저 계산했다.(모두 0 으로 바꾸는게 목적이므로) 4 5 4 5 5 1 5 0 14 -1 5 4 가 된다. 일단 한번의 편집에 탭을 추가하거나 뺄수 있으니 음수 양수로 나눠야겠다는 생각을 했다. (4) (-1) (5, 4) 로 나뉘게 된다. 한번의 편집은 여러줄을 그룹으로 선택할수 있기에 여러줄을 ..

algorithm 2021.08.31

백준 7569(JAVA)

문제 3차원 토마토 상자의 모든 토마토가 익는 최소 일수를 구해라. 풀이 2차원과 다른점은 갈수있는 경로가 위, 아래 2개 더 는것 뿐이다. 그 이외에는 다른게없다. 가중치 없는 그래프에서 최소일수이므로 bfs로 풀면 쉽게 풀수있다. 코드 package baekjoon.그래프탐색; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.*; public class Main7569 { static int M, N, H; static int[][][] board; static boolean[][][] visited; static List okTomatoes = new ..

algorithm 2021.08.29

[OS] 운영체제 Memory management

운영체제가 어떻게 메모리를 관리하는지 알아보자. 그전에 먼저 메모리에 대한 용어들 부터 알고 가자 메모리(기억장치)의 종류 레지스터는 cpu core내부에 존재하고, 캐시는 cpu내에 존재하는걸 확인할수있다.(그림에서) 메인메모리와 보조기억장치는 cpu내부에 없고 외부에 존재한다. 즉, 레지스터, 캐시는 HW(cpu)가 관리하고 메인메모리, 보조기억장치는 SW가 관리한다. 메모리(기억장치)의 계층구조 메모리는 보조기억장치 -> 메인 메모리 -> 캐시 -> 레지스터로 데이터를 전송하는 계층구조로 존재한다. 알아야할 두가지 용어 block : 보조기억장치가 주기억장치(메인메모리)로 데이터를 전송하는 단위(1 ~ 4KB) word : 주기억장치(메인메모리)가 레지스터로 데이터를 전송하는 단위(16 ~ 64bi..

computer science 2021.08.29