본문 바로가기
728x90

Quality control (Univ. Study)197

OS (pthread) fork의 return값은 child에서 0이고 parent는 pid이다. 0인경우와 그렇지 않은 경우로 조건문을 나누었으나 child와 parent 모두 40000000이 나온것으로 보아 fork를 진행하면 child와 parent에서 모두 process가 진행됨을 알 수 있다. deadlock 상태가 되어 아무것도 출력이 되지 않았다. 코드를 수정해보았다. foo2 함수에서 pthread_mutex_lock 함수를 통해 뮤텍스 잠금을 요청하고 임계영역에 접근을 해야하는데 lock1과 lock2의 순서가 바뀌어서 lock1과 lock2가 얽혀서 dedlock상태가 된것으로 추정되어 그 순서를 바꾸었더니 제대로 출력이되었다. 2022. 11. 13.
OS (fork) Fork Fork의 과정을 5ex1.c에서 실행하였다. Fork는 다음과 같은 과정을 통해 실행이 된다. 5ex1 running -> fork -> mov eax,2 , INT 128 -> system call: -> sys_fork -> do_fork 이를 정리하면 다음과 같다. 1. body를 복사합니다. 2. 프로세스 디스크립터를 복사합니다. 3. child에 대한 정보를 조정합니다. 4. child에게는 NULL값을 return하고 parent에게는 child의 pid를 return합니다. 따라서 위의 코드를 보면 먼저 child가 실행되어서 x:0이 먼저 출력되고 그 다음에 부모가 실행되어 x의 값에 4770를 return합니다. 이것으로 child의 pid는 4770번임을 알 수 있습니다. 과.. 2022. 11. 10.
Signal and System approximate computing 1번 문제 소스코드 import math #삼각함수와 pi를 이용하기 위해 math 모듈 import import matplotlib.pyplot as plt #pip install matplotlib을 통하여 미리 module install N = int(input()) #예삿값을 구하기 위한 N을 입력 t = 0 graph = [] #빈 리스트 생성 def sigma(t): #x_hat_n(t)의 결과를 구하는 sigma 함수 정의 n = 1 #n -> 1~N sum = 0.0 while n < N: #n이 N보다 작은 경우에 sum += (4.0 / math.pi) * (1 / n) * math.sin(n * math.pi * float(t)) #x(t)식 계산 n += 2 #n에 홀수값 대입 re.. 2022. 11. 6.
OS(process id) task_struct is defined in include/linux/sched.h (search for "task_struct {"). Which fields of the task_struct contain information for process id, parent process id, user id, process status, children processes, the memory location of the process, the files opened, the priority of the process, program name? ---process id: pid_t pid ---parent process id: struct task_struct *parent ---user id: uid_t.. 2022. 11. 5.
OS(interrupt) 함수의 첫줄에 내용을 추가하였습니다. Reboot 해보니 login화면에서부터 타이핑 자체가 진행이 되지 않았습니다. 이는 원래 interrupt가 발생 후, 키보드 입력과정을 처리한 뒤 IRQ_HANDLED를 리턴하는데, 이과정들을 거치지 않고 바로 IRQ_HANDLED를 리턴하도록 했기 때문에, 어떤 문자를 입력해도 실행이 되지 않는 것입니다. Login 자체가 불가능하여 다시 타이핑이 가능하게 하려면 linux2로 접속하여 함수를 다시 바꿔주고 리부팅을 해야했습니다. Printk를 통해 x pressed를 구현했다. 이와 같이 입력하면 x pressed가 출력이되는 것을 확인했습니다. Code의 값을 하나 증가 시키도록 하여 입력한 키의 오른쪽 버튼이 입력되도록 하였습니다. 다음과 같이 입력됨을 확.. 2022. 11. 5.
OS(system_call) System_call / Interrupt (2) 0부터 326번 까지 총 327개의 system calls를 확인해볼 수 있었다. Exit은 1번 fork는 2번 execve는 11번 read는 3번 write는 4번 Wait4는 114번 Mkdir는 39번 이었다. sys_ni_syscall의 call number는 17번이었고 -ENOSYS라는 무의미한 내용을 return하는 걸로보아 아무런 기능을 하지 않는 system call이다. system call 함수 sys_write를 modify 해본다. system call 함수는 linux-2.6.25.10/fs/read_write.c에 들어가서 접근할 수 있었다. length가 17인 string을 print할때 "length 17 string .. 2022. 10. 11.
OS(modificating kernel) Modification of the kernel /linux-2.6.25.10/init/main.c의 start_kernel() 함수를 modify해보고 해당 내용이 잘 출력이되는지 확인을 하였다. kernel을 modify하고 그 내용을 확인하기 위해서는 linux-2.6.25.10위치에서 "make bzImage"를 통해 kernel을 recompile하고 "cp arch/x86/boot/bzImage /boot/bzImage"를 통해 새로운 kernel을 boot location에 copy해주고 "reboot"를 통해 재부팅을 해주었다. 그 뒤에는 "dmesg > x", "vi x"를 통해 원하는 메세지 "hello from me"가 제대로 출력됨을 확인하였다. Modifing trap_init().. 2022. 10. 7.
자료구조론(5) Analysis of Algorithms 이전에 간단하게 복잡도 분석에 대해서 배웠으나 이제 본격적으로 알고리즘들을 분석하는 방법을 공부하였다. 대표적인 복잡도 분석 방법중 하나인 Big-O notation에 대한 개괄적인 설명이다. Big-O notation은 worst-case를 고려한 복잡도 분석법으로 복잡도 증가율의 상한(upper bound)를 나타낸다. Calculation 어떤 알고리즘을 7가지로 분류하기 위해 연산을 진행할 때는 기본적으로 Tight upper bound를 찾고자 진행한다. 예시를 통해 기본적인 연산 과정을 학습하였다. Ex1 Example: 2n + 10 is O(n) 2n+10 = 10 n >= 10/(c-2) Pick c=3 and n0 = 10 Ex2 Example:.. 2022. 10. 6.
OS (linux, start_kernel) Gentoo Linux Run Gentoo Linux on virtual machine. Making a simple program, ex1.c, with vi which displays "hello world". Compile and run it. Go to linux-2.6.25.10 directory and find all the files referred in Section 1 such as main.c, fork.c, entry_32.S, etc. 상위 디렉토리인 linux-2.6.25.10에서 grep -nr “start_kernel” * | more 명령어를 사용하여 start_kernel()함수가 init/main.c에 존재함을 확인하였습니다. cd init을 통하여 디렉토리를 이동하고 v.. 2022. 10. 3.
728x90