본문 바로가기

전체 글

(34)
동기화 임계 영역 - 하나의 프로세스가 수정 가능한 공유 자원을 액세스 하고 있을 때, 그 프로세스에 의해 참조되는 프로그램의 부분을 의미한다. - 하나의 프로세스가 공유 데이터를 접근하면, 다른 프로세스는 그 공유 데이터를 접근해서는 안 된다. 즉 여러 프로세스들 중에 하나의 프로세스만이 임계 영역을 사용할 수 있도록 하여 임계 영역에서 공유 변수 값의 무결성을 보장한다. - 임계 영역을 수행 중에 있는 프로세스는 인터럽트, 교착상태, 무한반복이 발생하지 않도록 해야 한다. 코드 지역 - 프로세스가 임계 영역에 진입하려면 진입허가를 요청해야 하는데, 이런 요청을 구현하는 코드 부분을 진입 역역이라고 한다. - 임계 영역을 사용한 이후에는 임계 영역을 빠져나왔음을 알리는 진출 영역이 있다. 나머지 코드 부분은 ..
캐시(Cache) - 프로세서와 메인 메모리 간의 처리 속도 차이를 보완하기 위한 고속 *버퍼이다. (*버퍼 : 데이터를 한곳에서 다른 한 곳으로 전송하는 동안, 일시적으로 그 데이터를 보관하는 메모리 영역) - 메인 메모리에서 데이터를 블록 단위(저속/낮은 대역폭)로 가져와 프로세서에 워드 단위(고속/높은 대역폭)로 전달한다. - 프로세서에서 읽어들인 워드에 참조하려는 정보가 있는 경우를 캐시 적중(cache hit), 없는 경우는 캐시 실패(cache miss)라 한다. 지역성(Principle of locality) 지역성이란 기억장치에 대해 특정 영역에만 참조가 집중적으로 이루어지는 것으로 공간적 지역성과 시간적 지역성 등이 존재한다. 1) 공간지역성(Spatial Locality) - 최근에 참조된 주소의 인접한..
멀티 프로세스 프로그램 - 하드디스크에 저장된 실행 파일 - 실행하지 않는 이상 하드디스크에 계속 남아 있으며, 같은 경로에 같은 이름으로 동시에 존재할 수는 없다. 프로세스 - 실행 중인 프로그램에 대한 인스턴스 - 프로세스는 운영체제로부터 각각 독립된 자원(code, data, stack, heap, PC register 등)을 할당받는다. - 각 프로세스는 최소 1개 이상의 쓰레드를 가지고 있다. - 다른 프로세스의 자원에 접근하려면, 프로세스 간 통신(IPC : 세마포어, 큐, 공유메모리)을 이용해야 한다. - 유닉스 계열에서 ps 명령어로 현재 수행되고 있는 프로세스를 확인할 수 있다. 멀티프로세스 단일 코어 CPU에서 여러 개의 실행 흐름이 동시에 필요하다고 가정하면, 실행 흐름사이에서 데이터를 공유해야 한..
4963: 섬의 개수 (그래프) import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { static int W, H; static int[] dx = { -1, 1, 0, 0, -1, -1, 1, 1 }; static int[] dy = { 0, 0, -1, 1, -1, 1, 1, -1 }; static int[][] arr; static boolean[][] visited; public static void main(String[] args) throws IOException { BufferedReader br = new Buff..
2573: 빙산 (구현) 풀이 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; public class Main { static int N, M; static int[][] map; static boolean[][] visited; static int[] dx = { -1, 1, 0, 0 }; // 상하좌우 static int[] dy = { 0, 0, -1, 1 }; // 상하좌우 public static void main(String[] args) th..
3190: 뱀 (구현) 풀이 보드의 크기만큼 2차원 int배열을 만들어주고 먼저 사과의 좌표값들을 큐에 모두 넣어준다. 또 초를 담을 1차원 int 배열 하나와 그에 따라 명령어를 담아둘 1차원 char 배열을 하나 만들어 명령어를 다 넣어두었다. (스터디 후에 생각해보건대 class개념으로 대체하면 더 편할 것 같다.) 도착지점은 끝 모서리로 1로 표시해두었다. 이후 0, 0에서 시작하여 체크하며 지나가는데 해당 시간이 지나면 명령어를 받아 방향을 틀어주게 하였다. 또한 사과를 먹을때 뱀의 길이가 늘어나는 걸 이용하기 위해 queue에 이동한 좌표를 담아 사과를 먹었다면 그 위치를 다시 넣어줌으로써 길이를 유지하게 하였다. 코드 import java.io.BufferedReader; import java.io.IOExcept..
2564: 경비원 (구현) 풀이 역시나 단순 무식하게 코드를 짜보았다. 동근이가 있는 위치에 따라 각 거리를 switch와 if문을 활용하여 모두 체크해주었다. 마지막에 다 더해주면 끝! 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.StringTokenizer; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); S..
8911: 거북이 (구현) 구현 단순무식하게 코드를 짜보았다. 거북이 처음위치를 0,0이라고 생각하고 왼쪽으로 간 최소의 x값, 오른쪽으로 간 최대의 x값, 위쪽으로 간 최대의 y값, 아래쪽으로 간 최소의 y값 중에 최소의 값들은 음수라면 절대값으로 바꿔 넓이를 구해 출력하게 해주었다. 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws NumberFormatException, IOException { BufferedReader br = new BufferedReader(new InputStrea..