42seoul
-
[Philosophers] Bonus part 함수 공부 (sem)42seoul 2021. 6. 14. 16:02
Mandatory와의 차이점 Mandatory Part가 쓰레드를 사용하는 문제였다면 Bonus Part는 프로세스 사용함. 쓰레드는 Mutex라는 함수를 이용하여 Lock을 걸기 때문에 Mutex를 공부했고 Bonus는 semaphore를 이용하기 때문에 semaphore를 공부하려고 한다. Semaphore exit, fork, kill은 이전 과제에서 사용해본 적이 있기 때문에 사용법 pass P & V 공부하기 세마포어 개념 먼저 공부하고 싶어서 P, V도 한번 짜봤다. #include #include #include #include int g_num = 0; void p() { while (g_num 0) break; printf("busy waiting[%d]...\n", g_num); } g..
-
[Makefile] make: *** [test] Error 142seoul 2021. 5. 25. 13:46
make: *** [test] Error 1 에러가 아니라 Makefile로 방금 실행시킨 파일이 0이 아닌 1로 끝났음을 알려주는 메세지임. 만약 코드를 수정해서 127을 반환하도록 하면 make: *** [test] error 127를 출력함. //Makefile 예시// NAME= philo_one CC= gcc CFLAGS= -Wall -Werror -Wextra SRCS= main.c OBJS= $(SRCS:.c=.o) all:$(NAME) $(NAME):$(OBJS) %.o:%.c $(CC) $(CFLAGS) -o $(NAME) main.c -lpthread clean: @rm -rf *.o fclean:clean @rm philo_one re:fclean all test:re ./$(NAME..
-
[Philosophers] 필로소퍼 70시간만에 끝내기(2)-첫번째 문제 파악하기42seoul 2021. 5. 21. 16:29
첫번째 문제 풀기: philo_one program name: philo_one turn in files: philo_one/(폴더에 넣으라는 뜻) makefile: 만들어라 arguments: 철학자의 수, 죽는 시간, 먹는 시간, 자는 시간, [각 철학자가 먹어야하는 횟수(선택적)] non common rules 각 철학자 사이에 포크가 하나 있음. 그러므로 왼쪽에 하나 오른쪽에 하나씩 있음. 포크를 겹치게 하는 것을 방지하기 위해, 각각을 뮤텍스로 그 상태를 보호해야 함. 각 철학자는 thread임 thread가 뭔지 먼저 찾아보기 사용함수 목록 memset printf malloc free write usleep 마이크로초 동안 대기 unistd.h 사용방법 예시: usleep(1000 * 100..
-
[Philosophers] 필로소퍼 70시간만에 끝내기(1)-과제파악하기42seoul 2021. 5. 18. 16:53
3써클인데 필로소퍼 하는 이유 6월 8일에 Inception이 5써클로 이동하고 Philosophers가 3써클로 내려온다고 해서 미리 Philosophers를 해놓으려고 한다. 하루에 7시간씩하면 10일만에 끝나겠지? + 필로소퍼는 과제 3개를 해야하는데 6월 8일에 3써클로 내려올때 셋중에 일부가 보너스로 넘어간다고 한다. 과제파악 식사하는 철학자들을 이용한 쓰레드, 프로세스 익히기 과제(쓰레드는 같은 메모리를 공유, 프로세스는 부모의 데이터를 그대로 복사하여 자식이 사용함, 고로 자식 프로세스에서의 자료 변경은 부모 프로세스의 자료에 영향을 주지 않음 등의 차이가 있다. 이걸 공부해야함.) 포크가 양쪽에 있음 -> 포크가 두개가 있어야 먹을 수 있음. 먹고 나면 자야함, 자고나면 생각해야함 -> 정..
-
[libasm] 어셈블리 (about 1 week) - 2일차(ft_strlen, ft_strcmp)42seoul 2021. 5. 6. 17:00
어셈블리 2일차(2) - ft_strlen, ft_strcmp에서 보아야할 개념들 jmp jmp는 무조건 점프이다. 조건 없이 주소로 점프한다. 유용하게 이용하면 strlen 잘 짤 수 있음 je & jne je는 zero flag가 1일 때 수행함. jne는 je에 not이 붙은 것, je가 zero flag가 1일 때 수행한다면 jne는 zero flag가 0이면 jump 수행함. je: jump if equal, jne: jump if not equal 사용예시: cmp 후에 jne쓰면 비교하여 다른 경우 jne 라인을 수행함 Zero Flag (ZF) : 단일비트플래그, 연산 결과가 0일때 1로 설정. [출처] sub, cmp sub(subtraction)는 빼기, cmp(compare)는 비교함..
-
[libasm] 어셈블리 (about 1 week) - 2일차(ft_write, ft_read)42seoul 2021. 5. 6. 16:47
어셈블리 2일차 NASM flag (-f macho64) -f : format Specifies the output file format. To see a list of valid output formats, use the -hf option.[man page] macho는 파일 포맷임 -> OS X에서 사용하는 실행 파일(Mach-O)[참고 블로그] OS X 실행파일(Mach-O) 헤더 구조와 유용한 툴들 MS윈도우에서 사용하는 PE와 유닉스의 ELF 포맷은 유명하지만 맥에서 사용하는 Mach-O 포맷은 상대적으로 덜 알려져 있는 것 같습니다. 그래서 OS X의 실행파일 포맷 중 헤더 부분에 대해서만 간단히 www.cocoadev.co.kr ft_read & ft_write 에러 처리 syscall을 ..
-
[libasm] 어셈블리 (about 1 week)42seoul 2021. 3. 26. 21:55
어셈블리 (about 1 week) 어셈블리 1주일만에 끝내기 Subject 읽기 Common Instructions You must write 64 bits ASM. Beware of the "calling convention". You can’t do inline ASM, you must do ’.s’ files. (inline asm: 고수준의 언어-c언어, ada- 상에서 저수준의 어셈블리 언어 쓸 수 있도록 하는 함수, 간단히 쓰면 c언어 코드에 어셈블리 언어를 삽입해서 쓰는 형태 ) You must compile your assembly code with nasm. (nasm-넷와이드 어셈블러-: 인텔 x86 아키텍처용, 가장 대중적인 리눅스용 어셈블러이자 역어셈블러임. 오픈소스 소프트웨어. ..
-
[cub3d] map parse 맵 파싱하기42seoul 2021. 3. 21. 02:06
방법1. 벽을 다른 문자로 치환하기 이건 내가 쓴 방법인데 왼쪽 위의 첫번째 벽을 Start point로 잡아서 출발한다. 사방에 1(벽)이 있는지 확인하고, 벽이 있으면 다른 문자(w)로 치환하며 앞으로 나아간다. 한번 간 길(w로 바뀐 길)은 다시 가지 않는다. 재귀함수로 짰기 때문에 길이 여러갈래 있으면 갈래 마다 함수를 호출하고 사방 모두 벽이 없으면 return 하여 탈출한다. 벽으로 잘 둘러싸인 맵이라면 이 포인터는 시작 지점으로 돌아오게 되고 모든 외곽의 벽은 'w'가 되어있을 것이다. 치환된 지도의 모습 치환된 지도를 가지고 제대로 된 맵인지 체크하는 방법은 여러가지가 있다. 1. 포인터가 시작지점바로 앞으로 되돌아 왔는지 체크 2. 치환된 지도에 1(벽)이 있는지 살펴보고, 1이 있다면 ..