전체 글(68)
-
[PCCP 기출문제] 2번 퍼즐 게임 챌린지
● 문제 설명 ●문제 요약1. 주어진 전체 시간(limit) 내에 모든 퍼즐을 해결하기 위한 최소한의 숙련도(limit)를 구해야함.2. 퍼즐이 4단계로 구성되어있고 level이 2이고, 주어진시간(limit)가 59이고, 난이도는 각각 [1,4,4,2] 이고, 각 난이도에 걸리는 시간이 [6,3,8,2]일 경우 [1번째 퍼즐에 걸리는 시간 = 2] [2번째 퍼즐에 걸리는 시간 = (4-2)번 틀려서 총 (3+6)x2+3 = 21] [3번째 퍼즐에 걸리는 시간 = (4-2)번 틀려서 총 (8+3)x2+8 = 30] [4번째 퍼즐에 걸리는 시간 = 2] 총 2+21+30+2 = 59라는 시간을 사용하여 퍼즐을 해결, 만약 level이 2보다 낮을 경우 59보다 시간이 더 걸리..
2025.01.18 -
[PCCP 기출문제] 1번 / 동영상 재생기
● 문제 설명 ● 문제 요약1. next 명령어 -> 재생위치 pos 기준으로 10초 뒤로 이동, 동영상의 남은 시간이 10초 미만일 경우 영상의 마지막 위치로 이동2. prev 명령어 -> 재생위치 pos 기준으로 10초 앞으로 이동, pos의 위치가 10초 미만일 경우 00:00으로 이동3. pos가 오프닝구간 사이에 있을 때 자동적으로 오프닝이 끝나는 위치로 이동 ● 문제 풀이 일단 video_len,pos,op_start,op_end와 같은 시간들은 모두 int형으로 바꿔주어야겠다고 생각했다. 그 이유는 현재 시간과 오프닝 시간을 비교하기 위해서는 int형으로 변환해서 비교하는게 가장 편하다고 생각했기 때문이다. 그 다음 커맨드에 따른 동작이다. end_check는 현재 시간이 비디오 시간을 넘지..
2025.01.16 -
파일 특수 제어 (ioctl) 구현
ioctl이란?유닉스 및 리눅스 시스템에서 디바이스 드라이버와 사용자 공간 프로그램 간의 특별한 입출력 작업을 수행하기 위해 사용되는 시스템 콜 long (*unlocked_ioctl)(file,cmd,arg) : 파일의 특수 제어(ioctl) 동작을 구현 단순 읽기/쓰기 동작 이외의 명령을 디바이스에 전달하고 싶을 때 사용● 일반적으로 디바이스를 설정하거나 설정을 확인하는 동작 기존의 lkm안에 있는 main.c에 추가한 부분이다. #define DEVICE_IOCTL_CLEAR _IO는 리눅스 커널에서 I/O 제어 명령을 정의할 때 사용되는 매크로이다. 여기서 c와 0은 각각 type과 number이다. type은 장치 유형을 나타내는 문자이고 c는 문자형 디바이스를 뜻한다. number는 명령 ..
2024.12.29 -
디바이스 드라이버 개발 (2)
파일 열기/닫기 구현int(*open)(inode,file) : 파일 열기 동작 구현void(*release)(inode,file) : 파일 닫기 동작 구현 inode : 파일에 대한 정보를 명시하는 구조체● i_rdev : 디바이스 노드의 주번호와 부번호를 나타내는 번호 , MAJOR() MINOR() 매크로로 주번호,부번호를 추출 가능 file : open으로 열었을 때 반환되는 fd(file descriptor)의 커널 공간 데이터● f_inode : 파일 정보를 갖고 있는 inode● f_cred : 파일을 열었을 때의 로그인 정보 (사용자 아이디, 그룹 아이디)● f_pos : 현재의 파일 커서 위치● f_mode : open으로 열 때 사용 한 모드 (O_APPEND , O_TRUNC , O_..
2024.12.28 -
디바이스 드라이버 개발 (1)
디바이스 드라이버의 종류● 문자 디바이스 드라이버- 대부분의 디바이스 드라이버가 이에 해당, 구현이 매우 간편● 블록 디바이스 드라이버- 대용량의 데이터를 저장하는 디바이스에 대해 사용● 네트워크 디바이스 드라이버- 외부와 통신을 하며 특히 소켓을 사용하여 통신하는 디바이스에 대해 사용● 버스 디바이스 드라이버- USB나 PCI등 여러 다른 디바이스가 꽂히는 포트 디바이스에 대해 사용- 디바이스를 탐색하고 인식하는 것이 주역할 디바이스 노드디바이스 드라이버를 다루기 위한 특수 파일 모든 디바이스 노드는 고유의 타입, 주번호, 부번호를 가짐● 타입 : 문자형 (c), 블록형 (b)● 주번호 : 디바이스 드라이버를 구분하기 위한 번호 (0~511)● 부번호 : 디바이스를 구분하기 위한 번호 (0~104857..
2024.12.28 -
해시테이블 (Hash Table)
데이터 검색시 걸리는 시간 복잡도를 줄이기 위한 자료구조 DEFINE_HASHTABLE(name) : 해시테이블 선언 hash_add(table,new,key) : 새로운 노드 추가 hash_del(target) : 해당 노드를 해시테이블에서 제거 hash_for_each_possible(table,node,member,key) {...} : key에 해당하는 해시테이블 순회 hash_for_each(table,bkt,node,hash) : 모든 노드를 순회 buffer 구조체를 설정해준다. buffer 구조체 안에는 실질적인 data값과 data값을 특정할 수 있는 key값과 node가 들어간다.DEFINE_HASHTABLE 명령어를 통해 해시테이블을 구축하는데 크기는 2의 제곱인 4이다. add_..
2024.12.23