728x90
반응형

전체 글 264

[크래프톤 정글 5기] PintOS 프로젝트 여섯번째 날, Multiprocess vs Multithread, deadlock 해결 전략

응용 프로그램 구현 시, Multiprocess와 Multithread중 하나를 선택하는 기준1. 안정성 vs 자원 사용 : 시스템 안정성이 매우 중요하면 멀티프로세스가 선호된다. 리소스가 제한적인 경우 멀티스레드가 더 효율적일 수 있다.2. 구현의 복잡성 : 스레드는 공유 메모리로 인해 동기화 문제가 복잡해질 수 있다. 따라서 멀티스레드를 사용하려면 개발자의 동시성 제어에 대한 이해도가 중요하다.3. 응답 시간 : 멀티 스레드는 Context Switching이 빠르게 때문에, 빠른 응답 시간을 요구하는 경유 유리하다.4. 플랫폼 및 언어 지원 : 사용 중인 프로그래밍 언어나 플랫폼이, 멀티스레드 또는 멀티프로세스 중 어느 쪽을 더 잘 지원하는지 고려할 수 있다. 멀티프로세스 : 조금 느리고 쉽지만 안..

[Baekjoon 13717 / Java / 실버5] 포켓몬 GO

N : 포켓몬 종류 개수P : 포켓몬M : P 포켓몬에 대한 총 사탕 개수K : P 포켓몬을 진화시키기 위해 필요한 사탕 개수  포켓몬을 진화시키면 2개의 사탕을 추가로 받게 된다.모든 포켓몬을 총 몇 번 진화시켰는지, 그리고 가장 많이 진화한 포켓몬의 이름을 출력하면 된다. 총 진화횟수를 upgrade 변수에 세고, 각 포켓몬마다의 진화횟수를 count로 세서 가장 많이 진화한 포켓몬 이름을 갱신해 주었다.진화할 때마다 사탕 2개를 받게 되니, 진화 시 "총 사탕 개수 - 필요한 사탕 개수" 를 할 때 2개를 덜 빼주면 된다. import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;// ..

[크래프톤 정글 5기] 입소 55일차, 대망의 PintOS 프로젝트 시작

벌써 입소 후 55일이 지나 3일 전 목요일부터 PintOS 프로젝트가 시작되었다. 이젠 정글의 일상에 적응할 대로 적응해서 크게 힘들거나 하는 건 없다. 아니 물론 힘들긴 하다. 하지만 못 버틸 정도는 아닌 수준이다. 지난 주 webproxy 주차는 나름 나쁘지 않은 성과였지만, 시간이 너무 부족해 web server만 만들고 메인 과제인 proxy서버를 구현하지 못 해서 아쉬움이 남았다. 구현하지 못 한 게 아니라 접근조차 못 했다. proxy 전 과제인 tiny web server 를 끝낸 후 복습하면서 블로그에 정리 글을 올렸더니 이미 수요일이 끝나 있었다. 이틀.. 아니 딱 하루만 더 있었더라도 proxy서버까지 끝낼 수 있었을 텐데. 아쉬움이 남는다. 그나마 위안이 되는 것은 다른 사람들도 나..

[PintOS] 키워드 정리 ( Process, Thread, CPU Scheduling, Semaphore, Mutex, Race Condition, Deadlock, Context Switching, MLFQ )

프로세스(Process)- 관리하는 최소 단위의 작업, 주기억장치에 등록된 프로그램 즉 실행중인 프로그램- CPU에 의해 실행되는 시스템 및 사용자 프로그램- 하나의 응용 프로그램은 여러 개의 프로세스로 이루어질 수 있음 스레드(Thread)- “하나의 프로세스 내에서 동시에 진행되는” 작업 갈래, 흐름의 단위ex) 하나의 브라우저에서, 파일을 다운받으면서 음악을 듣고 쇼핑을 하고 게임도 하는 것- 멀티(다중) 스레드 : 스레드가 여러 개 있는 것- 스레드는 프로세스의 메모리 영역(Code, Data, Heap, Stack) 중 Stack만 할당받아 복사하며, 나머지 Code, Data, Heap은 다른 스레드들과 “공유” 한다.- 따라서 Stack은 별도이지만 Heap은 공유하기 때문에 서로 다른 스레..

[webproxy-lab] 웹 소켓 통신 / Tiny Web Server 구현 (C언어)

Tiny Web Server는 말 그대로 작은 웹 서버이다.클라이언트의 요청을 받아 두개의 수를 더하는 adder 프로그램을 실행할 수 있으며,클라이언트가 정적 컨텐츠를 요청하는지, 동적 컨텐츠를 요청하는지 판단하여 Response를 보낼 수 있다. main 함수int main(int argc, char **argv) {  int listenfd, connfd;  char hostname[MAXLINE], port[MAXLINE];  socklen_t clientlen;  struct sockaddr_storage clientaddr;    // 포트번호 인자가 없으면 사용법 출력  /* Check command line args */  if (argc != 2) {    fprintf(stderr, "..

[webproxy-lab] 웹 소켓 통신 / Echo Server,Client 구현 (C언어)

클라이언트와 서버는 소켓 기반으로 연결된다.클라이언트의 요청을 서버가 받아서 그대로 되돌려주는 형태의 Echo Server와 Client를 구현해볼 것이다.주석이 상세히 달려 있으니 추가적인 코멘트는 필요 없을 거라고 생각한다.  Echo Client#include "csapp.h"// 인자 3개를 받는다.int main(int argc, char **argv) {    // 클라 소켓의 fd를 저장할 변수    int clientfd;    // 서버호스트명, 서버포트번호, 버퍼 저장할 변수    char *host, *port, buf[MAXLINE];    // rio 구조체 선언    rio_t rio;    // 이 프로그램 실행 시, 인자가 3개가 아니면 사용법을 출력한다    // 인자 1 ..

[webproxy-lab] 네트워크 프로그래밍 / 소켓 통신의 개념

파일 디스크립터(File Descriptor, FD)- 유닉스/리눅스 시스템에서 프로세스가 파일을 다룰 때 사용하는 개념, 프로세스에서 특정 파일에 접근할 때 사용하는 추상적인 값- 이 값은 일반적으로 “0이 아닌 양수 정수값”을 갖는다.- 프로세스 실행 중 파일을 Open하면, 커널은 해당 프로세스의 파일 디스크립터 숫자 중 사용하지 않는 가장 작은 값을 할당해 준다.- 이후 프로세스가 System Call을 이용해서 Open되어있는 파일에 접근할 때, FD값을 이용해서 파일을 지칭한다.- 기본적으로 할당되는 FD는 표준입력(Standard Input), 표준출력(Standard Output), 표준에러(Standard Error) 3가지이며 각각 0, 1, 2가 할당된다.   네트워크- 호스트에게 있..

[Baekjoon 7983 / Java / 골드5] 내일 할거야

N은 과제의 개수D는 과제 소요일, T는 과제 마감일이며 D, T 형태로 주어진다. 최대한 과제를 미루고 미루다가 마지막에 한번에 몰아서 하는데, 이 때 첫 과제를 시작하기 전 최대 며칠을 놀 수 있는지를 구하는 문제이다. 먼저 과제 마감일 기준으로 내림차순 정렬을 해줘야 한다. 그리고 day 변수에 가장 긴 마감일을 설정해 둔다. day는 놀 수 있는 날을 저장해둘 변수이며, 반복문이 진행되며 계속해서 갱신된다. 그리고 N번 반복문을 돌리되, day와 e(현재 과제의 마감일)중 더 작은 값에서 s(현재 과제의 소요일)을 뺀다.그 뺀 값을 다시 day에 할당한다. day가 길어도 과제의 마감일이 더 이르다면 마감일에서 s를 빼고,마감일이 길어도 현재 남은 day가 더 짧다면 day에서 s를 뺀다.이걸 반..

Algorithm/Greedy 2024.05.06

[Baekjoon 18429 / Java / 실버3] 근손실

기본 3대중량은 500이다.매일매일 중량은 K 씩 감소한다.매일매일 하나의 운동 키트를 사용하여 중량을 증가시킬 수 있다. 3대중량이 단 하루도 500 미만으로 내려가지 않도록, 운동 키트를 사용하는 순서의 경우의 수를 모두 찾기 결국 중량의 변화는 (K + 키트로 인한 중량 증가량) 이므로, 입력받은 배열에서 미리 K를 빼 주었다.중량 변화가 음수일 경우 500 미만으로 내려가는 것 이므로, 중량 변화량이 N일동안 계속해서 양수인 경우의 수를 찾으면 된다. import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.StringTokenizer;public class 근손실_18429 {        // 결과 저장할 변..

[Baekjoon 1026 / Java / 실버4] 보물

두 배열이 있고 배열의 길이는 같다.각 배열 같은 인덱스의 값들을 곱한 값을 전부 더하는데, 그 값을 최소로 만들어야 한다. A 배열은 재배열할 수 있고 B 배열은 재배열할 수 없다.A 배열을 내림차순 정렬한 후, B배열의 최솟값을 찾아 차례대로 곱하여 더해주면 해결할 수 있다. import java.io.*;import java.util.*;public class 보물_1026 {    public static void main(String[] args) throws Exception {                BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        StringTokenizer st;      ..

Algorithm/Greedy 2024.05.03
728x90
반응형