전체 글 202

CPU Scheduling

- 프로그램 실행중에는 CPU 작업만 실행하는 CPU brust와 I/O 작업을 수행하는 I/O brust 작업이 번갈아 가면서 실행된다 - 프로그램 종류에 따라 CPU brust와 I/O brust가 빈번하게 일어나는 경우가 있고 CPU brust만 계속 하다가 가끔씩만 I/O brust가 일어나는 경우가 있음 - 일반 사용자가 사용하는 프로그램은 대부분 CPU brust와 I/O brust가 자주 번갈아가면서 실행됨 - 과학 계산용 프로그램은 I/O brust는 거의 없고 CPU brust만 오래 사용함 - x축은CPU brust의 길이(크면 클수록 CPU brust 시간이 김) y축은 빈도 - CPU 사용량을 관찰한 결과 I/O brust가 빈번하게 일어나는 작업이 대다수고 CPU brust가 긴 ..

Process Management

프로세스는 어떻게 생성되는가 - Parent process가 children process를 생성 - 자식 프로세스가 부모 프로세스를 복제 하면서 탄생함 - 부모의 code, data, stack을 모두 복제해서 그대로 만듬 - 부모가 어디까지 실행했는지 PC도 복제해서 생성 - 자식 프로세스가 생성되는 순간 독립적인 프로세스가 되기 때문에 부모 프로세스와 자원을 공유하기 보다는 공유하지 않고 경쟁함 fork() : 시스템 콜이 새로운 프로세스를 생성 - 부모를 그대로 복사 (OS data except PID + binary) - 주소 공간 할당 exec() : 시스템 콜을 통해 새로운 프로그램을 메모리에 올림 - 부모와 똑같이 가지 않고 다른 프로세스를 만들때 사용 - 기존에 있는거 그대로 만드는게 쉬..

Process2 - 스레드

Thread - 프로세스 내부에 여러개의 실행 단위(스레드)가 존재할수 있다 - 프로세스 하나일때의 사진, 프로세스마다 stack, data, code가 존재한다 - 해당 프로세스의 PCB에는 PC(program counter)가 있어 어느 code 부분을 실행중인지 알려준다 - 하나의 프로세스에 여러개의 스레드가 있을떄 - 프로세스는 똑같이 stack, data, code가 생성됨 - 각 스레드마다 어떤 code를 가르키고 있는지 PC만 다름 - 같이 공유할수 있는 자원은 최대한 공유하자 - 같이 공유하는 자원(프로세스가 사용하는 각종 자원들): code section, data section, OS resource - 공유 안하는것(CPU 수행과 관련된 정보, task 라고 부름): PC - 어느 위..

백준 2225 자바 - 합분해

문제 https://www.acmicpc.net/problem/2225 2225번: 합분해 첫째 줄에 답을 1,000,000,000으로 나눈 나머지를 출력한다. www.acmicpc.net 문제해결 - 주석참고 import java.util.Scanner; public class B2225_2 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int n = sc.nextInt(); int k = sc.nextInt(); int[][] dp = new int[201][201]; // k=1, 정수 1개만으로 i를 만들어야 할때 무조건 1가지 경우밖에 없음 for (int i = 1; i

백준 1699 자바 - 제곱수의 합

문제 https://www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있는데, 11의 경우 11=22+22+12+12+12(5개 항)도 가능하다 www.acmicpc.net 문제해결 - 11일 경우 1^2 + 1^2 + 1^2..... : 11개 (j=1) dp[10] + 1^2 : (dp[10]+1) 3개 (j=2) dp[7] + 2^2 : (dp[7] + 1) 5개 (j=3) dp[2] + 3^2 : (dp[2] + 1) 3개 이 중 최소값인 3이 정답 import java.util.Scanner; public clas..

백준 1912 자바 - 연속합

문제 https://www.acmicpc.net/problem/1912 1912번: 연속합 첫째 줄에 정수 n(1 ≤ n ≤ 100,000)이 주어지고 둘째 줄에는 n개의 정수로 이루어진 수열이 주어진다. 수는 -1,000보다 크거나 같고, 1,000보다 작거나 같은 정수이다. www.acmicpc.net 문제해결 - dp 배열을 만들어 반복문을 돌면서 i번째 까지의 연속합 중 가장 큰 값을 dp배열에 담는다 - dp 배열 중 가장 큰 값이 연속합 중 가장 큰 값이 된다 - 맨 첫번째 숫자의 연속합은 자기 자신이므로 dp[0] = arr[0]으로 초기화 해준다 - 예제 1번의 수열일때 10 -4 3 1 5 6 -35 12 21 -1 dp 배열: [10, 6, 9, 10, 15, 21, -14, 12, 3..

Process1

프로세스란? - Process is a program in execution: 실행중인 프로그램 프로세스의 문맥(context): - CPU 수행 상태를 나타내는 하드웨어 문맥(program counter, 각종 register) - 프로세스의 주소 공간(code, data, stack) - 프로세스 관련 커널 자료 구조(PCB, Kernal stack) 프로세스의 상태: 프로세스는 상태(status)가 변경되며 수행된다 - Running: CPU를 잡고 instruction을 수행중인 상태 - Ready: CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고) - Blocked(wait, sleep): CPU를 주어도 당장 instruction을 수행할 수 없는 상태 Process 자신이 요청한..

백준 14002 자바 - 가장 긴 증가하는 부분 수열 4

문제 https://www.acmicpc.net/problem/14002 14002번: 가장 긴 증가하는 부분 수열 4 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 문제해결 - 11053 가장 긴 증가하는 수열 문제와 똑같이 가장 긴 수열 길이를 구하고 배열 역추적을 하면 된다 - 가장 긴 배열이 max라 했을때, dp 배열 뒤에서부터 검사하면서 max와 같은 경우를 stack에 담고 max를 -1 하면 된다 - 뒤에서 부터 검사하므로 LIFO 구조인 stack을 사용한다..

백준 11053 자바 - 가장 긴 증가하는 부분 수열

문제 https://www.acmicpc.net/problem/11053 11053번: 가장 긴 증가하는 부분 수열 수열 A가 주어졌을 때, 가장 긴 증가하는 부분 수열을 구하는 프로그램을 작성하시오. 예를 들어, 수열 A = {10, 20, 10, 30, 20, 50} 인 경우에 가장 긴 증가하는 부분 수열은 A = {10, 20, 10, 30, 20, 50} 이 www.acmicpc.net 문제해결 - dp 배열을 만들어 0~N번째 까지 가장 긴 수열의 개수를 담는다 - 어떤 숫자로도 수열을 만들면 개수가 1이므로 dp는 1로 초기화 한다 - 2중 반복문을 돌면서 i번째 숫자와 0~i번째 숫자를 비교하며 가장 긴 수열의 길이를 dp에 담는다 - i번째 숫자가 j번째 숫자보다 큰 경우 여태까지 만들 수..

System Structure & Program Execution 2

instruction: - 실행해야하는 기계어, 보통 4비트로 구성 - 순차적으로 기계어를 실행하다 반복문이나 함수를 만나면 점프뜀 - 매 기계어를 실행하고 interrupt 라인을 체크, interrupt가 있으면 실행해야 할 기계어를 잠시 멈추고 CPU를 OS에게 줌 - OS는 CPU를 받고 interrupt 상황에 따라 인터럽트 백터를 참고하여 해당 인터럽트를 처리하는 커널 함수(인터럽트 처리 루틴)을 실행함 - OS가 CPU를 가지고 있을때는 mode bit이 0, 모든 기계어 실행 가능(다른 사용자의 메모리나 I/O 디바이스 접근 가능) - 사용자 프로그램이 CPU를 가지고 있을땐 mode bit이 1, 제한된 기계어만 사용 가능 - 사용자 프로그램이 I/O 할일이 있을때 OS에게 요청해야 하는..