./myspin 3는 기본적으로 3초 대기하는 함수로 추정됨.
[1] [2] jobs의 id를 의미함
argv는 cmdline을 parseline에서 한개한개로 떼내기위한 배열로 사용함(2차원 배열=2차원 포인터)
jobs와 관련된것은 background의 것을 배열에 넣어서 하는 방식으로, 전역배열이기 때문에 저장할수 있다는 장점이있음.
Job에 관련된 함수
job은 크게 4가지를 한 칸에 저장하는데, 1.pid_t pid 2. int jid 3. int state, 4. char cmdline[]이다.
1. pid_t는 이번 프로세스의 pid를 의미한다.
2. jid는 순서대로 저장하는 방식인거 같다. (아무래도 땡기는 과정을 없애기 위해서 만든 방식인듯) 보통 배열의 index로 저장하는데, 여기는 그렇게 하지 않고 jid가 순서를 의미한다. nextjid를 활용하여 다음 jid를 정한다.
삭제를 해도 jid는 바뀌지않고, nextjid는 현재 가장 높은 jid+1로 된다고 생각하면 된다.
3. state는 잘은 모르겠으나, 일단 FG와 BG UNDEF ST가 있는데, FG, BG는 각각 foreground, background인것 같다.
4. cmdline은 니가생각하는 그 cmdline을 복사해서 가져온다. (strcpy)
각 함수
clearjob jobs라는 배열의 한 칸에 해당하는 job을 초기화시킨다. 초기화 상태는 (0,0,UNDEF, \0) 반환값 없음
initjobs joblist를 시작하는건데, 모든 칸을 clearjob한다고 보면된다. 반환값없음
maxjid 가장 큰 jid를 찾아서 int로 반환한다.
addjob 핵심이라고 할수있는데, jobs 배열, pid, state, cmdline을 받아서 비어있는 첫칸에 넣고,
성공했음 성공했다는 내용, 실패했으면 실패했다는 내용을 printf로 출력한다. (이게 쉘에서는 어케되는지는 모르겠다)
성공하면 1을 반환하고, 실패하면 0을 반환한다.
deletejob jobs 배열과 pid를 받아서, 해당하는 pid가 있는칸을 싹 지워버린다.
fgpid jobs배열만 받아서 상태가 FG인 놈의 PID를 반환한다. (얘로 SIGNAL보내는거구만?)
getjobpid jobs 배열과 pid를 받아서 해당하는 pid가 있는 job 자체를 반환한다.
getjobjid jobs 배열과 jid를 받아서 해당하는 jid가 있는 job 자체를 반환한다.
pid2jid pid를 받아서 jid를 반환한다.
listjobs jobs를 통째로 반환한다.
'컴퓨터 시스템' 카테고리의 다른 글
Shell에 대한 내용 정리 (0) | 2021.11.19 |
---|---|
waitpid 사용법 (0) | 2021.11.07 |
shell 주요 함수 정리 (0) | 2021.11.07 |
Little Endian과 Big Endian (0) | 2021.11.01 |
mov와 lea의 비교, 어셈블리 접미사의 의미(q, l, w,b) (0) | 2021.10.28 |