Microsoft PowerPoint - 05_프로세스(my).ppt [호환 모드]
|
|
- 선미 승
- 6 years ago
- Views:
Transcription
1 5 장프로세스 프로세스와프로세스디스크립터의이해 task_struct 구조체 프로세스생성과소멸 프로세스상태와전이 스케줄링 시그널 한빛미디어 ( 주 )
2 Section 01 프로세스와프로세스디스크립터의이해 Section 01 프로세스란? 실행중인프로그램 프로세스 = 태스크 (task) 자신에게포함된기계어명령을종료할때까지실행하는동적인존재 살아있는동안많은자원을사용 자원 : CPU, 메모리, 파일그리고시스템내의물리적인장치등 커널과프로세스 커널 : 프로세스관리자 + 자원관리자 커널쓰레드 (kernel thread) 커널모드에서실행되며다른커널쓰레드들과함께자원을공유 독립적인 PID를부여받고스케줄링도독립적으로이루어지는하나의객체» 커널쓰레드도하나의태스크로봐도무방함 2
3 Section 01 프로세스와프로세스디스크립터의이해 Section 01 프로세스디스크립터 커널은각프로세스가무엇을하고있는지명확히알아야한다. 프로세스의 ID 및우선순위는어떤지, 프로세스가실행상태인지, 어떤사건을기다리며블록된상태인지, 프로세스에어떤주소공간이할당되어있는지, 어떤파일을다룰수있는지,.. process 와관련된모든정보를담는역할 = PCB(Process Control Block) Linux 에서는 task_struct 라는자료구조를사용 current (/usr/src/kernels/mylinux/arch/x86/include/asm/current.h : line 37) 라는전역변수가 task_struct (/usr/src/mylinux/include/linux/sched.h : line 1115) 자료구조를포인팅 3
4 Section 02 task_struct 구조체 Section 02 구조체를통한정보관리 프로세스가생성되면 task_struct 구조체를통해프로세스의모든정보를저장하고관리 모든태스크들에게하나씩할당 include/linux/sched.h : line 1115 태스크 ID, 상태정보, 가족관계, 명령, 데이터, 시그널, 우선순위, CPU 사용량및파일디스크립터등생성된태스크의모든정보를가짐 alloc_task_struct 매크로를통해커널영역의메모리에서 8KB를할당받아프로세스디스크립터와커널스택의자료를저장 current : 현재실행되고있는태스크를가리키는변수» include/arch/x86/include/asm/current.h : line 37 [ 그림 5-1] 커널스택과프로세스디스크립터 4
5 Section 02 task_struct 구조체 Section 02 task_struct 구조체를구성하고있는멤버들의정보유형별분류 [ 그림 5-2] task_struct 구조체 5
6 Section 02 task_struct 구조체 Section 02 태스크식별정보에관련된변수들 pid _ t pid; pid_t pgrp; pid_t session; pid_t tgid; int leader; // PID // 그룹 ID, 일반적으로부모로부터상속 // 세션 (session) ID // 스레드그룹 ID // 세션 leader 태스크그룹과세션리더의예 사용자가콘솔로로그인하여셸을띄웠다고가정 셸도하나의태스크이므로자신의 PID를가지며, 하나의태스크그룹을형성 #ls more 명령을실행하면각명령에대해각각 PID 값을부여받고, 이두명령은하나의태스크그룹을형성 두개의태스크그룹은하나의세션을이루며이때셸은세션리더가됨 6
7 Section 02 task_struct 구조체 Section 02 태스크들에대한사용자의접근제어에관련된변수 태스크가생성되면사용자의 ID 와사용자가속한그룹의 ID 가등록됨 uid_t uid,euid,suid,fsuid; // 사용자접근제어에이용 gid _ t gid,egid,sgid,fsgid; g, g, g // 사용자그룹에대한접근제어에이용 int ngroups; // 태스크가속한그룹의수 gid_t groups[ngroups]; // 태스크가속한그룹 euid 프로그램이실행될때즉, 태스크가갖는 uid 를의미 예 ) 패스워드변경 수퍼유저의권한으로실행을해야하는경우처럼비록일반사용자가실행하였지만수퍼유저의권한을가짐 7
8 Section 02 task_struct 구조체 Section 02 태스크상태정보에관련된변수 state 변수 #define TASK_RUNNING 0 #define TASK_INTERRUPTIBLE 1 #define TASK_UNINTERRUPTIBLE 2 #define TASK_ZOMBIE 4 #define TASK_STOPPED 8 TASK_RUNNING 실행중이거나준비상태 TASK_UNINTERRUPT 하드웨어적인조건을기다리는상태, 시그널을받아도무시 예 ) process 가장치파일을열때해당장치드라이버가자신이다룰 하드웨어장치가있는지조사할때, memory swapping TASK_INTERRUPT 하드웨어나시스템자원을사용할수있을때까지기다리고있는대기상태» 예 ) wait for a semaphore TASK_STOPPED 수행중단상태 ( 시그널을받거나트레이싱등 ) TASK_ZOMBIE process 실행은종료했지만아직 process 의정보를반환하지않은상태 8
9 Section 02 task_struct 구조체 Section 02 procdesc_ptr ->state = TASK_RUNNING; 디스크상태와전이 dispatch running exit fork ready timeout sleep, lock zombie wait wakeup, unlock wait 9
10 Section 02 task_struct 구조체 Section 02 flags 변수 프로세스의상태플래그 #define PF_ALIGNWARN 0x /* Print alignment warning msgs */ #define PF_STARTING 0x /* being created */ #define PF_EXITING 0x /* getting shut down */ #define PF_ FORKNOEXEC 0x /* forked but didn't exec */ #define PF_SUPERPRIV 0x /* used super-user privileges */ #define PF_DUMPCORE 0x /* dumped core */ #define PF_SIGNALED 0x /* killed by a signal */ #define PF_ MEMALLOC 0x /* Allocating memory */ #define PF_MEMDIE 0x /* Killed for out-of-memory */ #define PF_FREE_PAGES 0x /* per process page freeing */ #define PF_NOIO 0x /* avoid generating further I/O */ #define PF_FSTRANS 0x /* inside a filesystem transaction */ #define PF_USEDFPU 0x /* task used FPU this quantum (SMP)*/ unsigned long flags; 10
11 Section 02 task_struct 구조체 Section 02 ptrace 변수 디버깅목적으로사용되는플래그 #define PT_PTRACED #define PT_TRACESYS #define PT_DTRACE #define PT_TRACESYSGOODTRACESYSGOOD #define PT_PTRACE_CAP 0x x x x x 스케줄링정보에관련된변수들 volatile long need_resched; // 스케줄링이일어나도록유도하는변수 long counter; // 틱 (tick) 단위로 CPU 시간을할당받기위해사용 long nice; // 우선순위 unsigned long policy; // 스케줄링정책 unsigned long rt_priority; // 실시간태스크우선순위 unsigned long cpus_runnable, cpus_allowed; int processor; // SMP 환경에서스케줄링목적으로사용 11
12 Section 02 task_struct 구조체 Section 02 태스크관계와관련된변수들 struct task_ struct *p_ opptr, *p_pp pptr, *p_ cptr, *p_ysptr, *p_ osptr; p_opptr과 p_pptr : 부모태스크» p_oppr : Original Parent p_cptr : 자식, p_ysptr : 아우, p_osptr : 형 struct task_struct *next_task, *prev_task; 커널에존재하는모든태스크들은원형이중연결리스트로연결» SET_LINKS : 리스트에추가하는매크로» REMOVE_LINK : 리스트서삭제하는매크로 12
13 Section 02 task_struct 구조체 Section 02 struct task_struct *pidhash_next; struct task_struct **pidhash_pprev; 태스크를빨리검색하기위해 pidhash 테이블의연결리스트유지 해시함수는 PID 와테이블인덱스사이에일대일대응을보장하지않음 해시테이블 include/linux/sched.h» #define PIDHASH_SZ SZ (4096 >> 2)» extern struct task_struct *pidhash[pidhash_sz];» #define pid_hashfn(x) ((((x) >> 8) ^ (x)) & (PIDHASH_SZ - 1)) 시그널정보와관련된변수들 int sigpending; // 블록되지않은대기중인시그널이있는지를표시 struct signal_struct *sig; // 시그널핸들러정보저장 sigset_t blocked; // 블록된시그널표시 struct sigpending pending; // 대기중인시그널리스트 13
14 Section 02 task_struct 구조체 Section 02 메모리정보와관련된변수들 struct mm_struct *mm; // 태스크가소유한메모리공간에대한정보 struct mm_struct *active_mm; // 태스크실행시사용하는메모리공간에대한정보 일반태스크는동일, 커널스레드는사용자주소공간의메모리영역을사용하지않으므로 mm은 NULL 임 메모리정보와관련된변수들 struct fs_struct *fs; struct files_struct *files; // 파일시스템의정보와관련된변수 // 태스크가오픈한파일들에접근할때사용 14
15 Section 02 task_struct 구조체 Section 02 문맥교환정보와관련된변수 struct thread_ struct thread; // 문맥을저장하기위한변수 문맥 태스크가생성될때커널이태스크정보를관리하기위해할당하는자료구조 태스크의자원과수행환경집합 시간정보와관련된변수들 struct timer_list real_timer; struct tms times; unsigned long start_time; // 타이머핸들러에대한정보 // 사용자레벨과커널레벨에서의태스크실행시간 // 태스크가생성된시간 15
16 Section 02 task_struct 구조체 Section 02 자원사용과관련된변수들 struct rlimit rlim[rlim _ NLIMITS]; // 자원의사용현황 char comm[16]; // 태스크의이름 struct rlimit { unsigned long rlim_cur; // 현재설정된허용자원의수 unsigned long rlim_max; // 최대로허용할수있는자원의수 }; /* include/linux/resource.h */ #define RLIMIT_CPU 0 // 프로세스의최대 CPU 사용시간 #define RLIMIT_FSIZE 1 // 최대파일의크기 #define RLIMIT_DATA 2 // 최대데이터세그먼트크기 #define RLIMIT_STACK 3 // 최대스택세그먼트크기 #define RLIMIT_CORE 4 // 코어파일의최대크기 #define RLIMIT_RSS 5 // 최대페이지프레임수 16
17 Section 02 task_struct 구조체 Section 02 자원사용과관련된변수들 #define RLIMIT_NPROC 6 // 사용자당생성가능한최대프로세스수 #define RLIMIT_NOFILE 7 // 최대로오픈가능한파일의수 #define RLIMIT_MEMLOCK 8 // 최대잠글수있는메모리 #define RLIMIT_AS 9 // 최대주소공간 #define RLIMIT_LOCKS 10 // 최대락 (lock) 의설정수 #define RLIM_NLIMITS 11 // 정의하고있는자원제한수 17
18 [ 실습 5-1] 태스크 PID 와이름을출력하는시스템콜구현 문제 커널에존재하는모든태스크들의 pid 와이름을출력하는시스템콜을작성해보자. 문제를해결하기위한조건 (1) 커널에존재하는모든태스크들은원형이중연결리스트로연결되어있으며, 시작은 init_task 변수가가리 키고있다. 리스트에서다음노드를가리키는포인터변수는 next_task 다. (2) 프로그래밍의편의를위해모듈로작성해도무방하다. (3) 시스템콜번호는사용되지않고있는번호하나를할당하라. (4) 시스템콜이름은 sys_displaytask 로정의한다. [ 실행화면예 ] 18
19 [ 실습 5-1] 태스크 PID 와이름을출력하는시스템콜구현 (1) 시스템콜처리함수작성 01 asmlinkage int sys _ displaytask() 02 { 03 int i; 04 struct task_struct *findtask; findtask = &init_task; 07 printk( "%s[%d] ", findtask->comm, findtask->pid ); findtask = findtask->next_task; 10 while(findtask->pid!= init_task.pid ) 11 { 12 printk( "-> %s[%d]", findtask->comm, findtask->pid ); 13 findtask = findtask->next_task; 14 } printk( "-> %s[%d] \n", findtask->comm, findtask->pid ); 17 return 0; 18 } [ 소스 5-1] 19
20 [ 실습 5-1] 태스크 PID 와이름을출력하는시스템콜구현 1 1행 : 시스템콜처리함수정의 2 6행 ~7행 : init_task 변수를 findtak에저장하고이름과 pid를출력 init_taskit t 는리스트의헤더 3 9행 ~14행 : 다음리스트부터시작하여다시 init_task로돌아올때까지태스크의이름과 pid를출력 4 16행 : 리스트의처음으로되돌아왔음을확인하기위해태스크이름과 pid를출력 사용자응용프로그램에서출력값들을돌려받고, 응용프로그램에서출력하도록코드수정할것 20
21 [ 실습 5-1] 태스크 PID 와이름을출력하는시스템콜구현 (2) 사용자응용프로그램작성 01 /* app_displaytask.c */ _syscall0(int, displaytask) int main() 06 { 07 int i; 08 i = findtask(id); 09 } [ 소스 5-2] (3) Makefile 작성과컴파일 TARGET = displaytask [ 소스 5-3] INCLUDE = -isystem /usr/src/linux /include CFLAGS = -O2 -D KERNEL -DMODULE $(INCLUDE) //CFLAGS = -O2 $(INCLUDE) CC = gcc ${TARGET}.o: ${TARGET}.c clean: rm -rf ${TARGET}.o 21
22 [ 실습 5-1] 태스크 PID 와이름을출력하는시스템콜구현 (4) 응용프로그램컴파일 #gcc -o app_displaytask app_displaytask.c (5) 실행및결과확인 #insmod displaytask.o #./app_displaytask 22
23 [ 실습 5-2] 해시함수를이용한태스크찾기 문제 태스크의 pid를인자로전달하고커널에서해시테이블을이용하여해당태스크를찾아해시테이블의인덱스와해당태스크의이름을출력하는시스템콜을작성해보자. 문제를해결하기위한조건 (1) 해시함수와해시테이블을이해해야한다. 이는본문을참조하라. (2) 프로그래밍의편의를위해모듈로작성해도무방하다. (3) 시스템콜번호는현재사용되지않는번호하나를할당하라. (4) 시스템콜이름은 sys_findtask로정의한다. [ 실행화면예 ] 존재하는태스크에대한결과 존재하지않는태스크에대한결과 23
24 [ 실습 5-2] 해시함수를이용한태스크찾기 (1) 시스템콜처리함수작성 01 asmlinkage int sys_findtask(int id) 02 { 03 int hash_index=0; 04 struct task_struct *findtask; hash_index = pid_hashfn(id); 07 findtask = pidhash[hash_index]; h[h h i d if (findtask == NULL ) { 10 printk( "Task not exist \n" ); 11 return (-1); 12 } while( findtask->pid!= id ) 15 { 16 findtask = findtask->pidhash >pidhash_next; 17 if (findtask == NULL ) { 18 printk( "Task not exist \n" ); 19 return(-1); 20 } 21 } 22 printk("hash table index=%d, pid=%d, Task Name is %s \n", hash_index, findtask->pid, findtask->comm ); return 0; 25 } [ 소스 5-4] 24
25 [ 실습 5-2] 해시함수를이용한태스크찾기 (1) 시스템콜처리함수작성 ( 계속 ) 1 1 행 :pid 를인자로받는시스템콜처리함수를정의 2 6행 ~7행 : 해시함수를이용하여해시테이블의인덱스를찾고이인덱스에대응하는테이블의내용을 findtask에저장 3 9 행 ~12 행 : findtask 가 NULL 이면연결된태스크가없으므로 -1 을리턴값으로하여복귀 4 14행 ~22행 : 하나의인덱스에여러개의태스크가연결되어있을수있으므로리스트를탐색 만약찾게되면루프를벗어나고마지막까지찾지못하면복귀 행 : 해시테이블에존재하는경우해시테이블인덱스, PID, 태스크이름출력 사용자응용프로그램에서출력값들을돌려받고, 출력하도록코드수정할것 25
26 [ 실습 5-2] 해시함수를이용한태스크찾기 (2) 사용자응용프로그램작성 01 /* app_findtask.c */ _syscall1(int, findtask, int, id) int main(int argc, int *argv[]) 06 { 07 int i, id; id = atoi(argv[1]); 10 i = findtask(id); 11 } [ 소스 5-5] (3) Makefile 작성과컴파일 (4) 실행및결과확인 #insmod findtask.o #./app_findtask 1 26
27 Section 03 프로세스생성과소멸 Section 03 생성 fork() sys_fork( ) do_fork( ) arch/x86/kernel/process_32.c 596 행 do_fork( ) (kernel/fork.c 1337 행 ) task_structstruct 를확보하여생성되는태스크에게할당및초기화 PID를할당및 task_struct의각멤버변수들을초기화 새로운자료구조생성 1386행 : copy_process() (935행) 호출 () copy_files( ), copy_fs( ), copy_sighand( ), copy_mm( ) 등호출 실행큐에삽입 do_fork 주요코드 1 task_struct 구조체확보및공간할당 p = alloc_task_struct(); struct(); 2 부모프로세스디스크립터를자식프로세스디스크립터에복사 *p =*current; 27
28 Section 03 프로세스생성과소멸 Section 03 3 새로운태스크생성을위한자원검사 if (atomic_read(&p->user->processes) >= p->rlim[rlimit_nproc].rlim_cur && p->user!= &root_user &&!capable(cap_sys_admin) &&!capable(cap_sys_resource)) goto bad_fork_free; atomic_inc(&p->user-> count); atomic_ inc(&p->user->processes); p if (nr_threads >= max_threads) goto bad_fork_cleanup_count; 4 실행도메인검사및커널모듈참조검사 get_exec_domain(p->exec_domain); if (p->binfmt && p->binfmt->module) MOD_INC_USE_COUNT(p->binfmt->module); 28
29 Section 03 프로세스생성과소멸 Section 03 5 flag 필드갱신 copy_flags(clone_flags, p); 6 PID 할당 p->pid = get_pid(clone_flags); 7 프로세스디스크립터갱신 p->run >run_list.next next = NULL; p->run_list.prev = NULL; p->p_cptr = NULL;... p->sigpending = 0; init_sigpending(&p->pending);... init_timer(&p->real_timer); p->real >real_timer.data = (unsigned long) p; p->leader = 0; /* session leadership doesn t inherit */ p->tty_old_pgrp = 0; p->times.tms_utime = p->times.tms_stime = 0; p->times.tms >times.tms_cutime = p->times.tms >times.tms_cstime = 0; 29
30 Section 03 프로세스생성과소멸 Section 03 8 부모프로세스의자료복사 if (copy_files(clone_flags, p)) goto bad_fork_cleanup; if (copy_fs(clone_flags, p)) goto bad_fork_cleanup_files; if (copy_sighand(clone_flags, p)) goto bad_fork_cleanup_fs; if (copy_mm(clone_flags, p)) goto bad_fork_cleanup_sighand; retval = copy_namespace(clone_flags, p); retval = copy_thread(0, clone_flags, stack_start, stack_size, p, regs); 9 counter 값설정 p->counter = (current->counter + 1) >> 1; current->counter >>= 1; if (!current->counter) current->need_resched = 1; 30
31 Section 03 프로세스생성과소멸 Section 태스크리스트에추가 SET_LINKS(p); #define SET_LINKS(p) do { \ (p)->next_task = &init_task; \ (p)->prev_task = init_task.prev_task; \ init_task.prev_task->next_task = (p); \ init_task.prev_task = (p); \ (p)->p_ysptr = NULL; \ if (((p)->p_osptr = (p)->p_pptr->p_cptr) > t )!= NULL) \ (p)->p_osptr->p_ysptr = p; \ (p)->p_pptr->p_cptr = p; \ } while (0) 11 counter 값설정 hash_pid(p); 12 태스크의상태변경 wake_up_process(p); 31
32 Section 03 프로세스생성과소멸 Section 03 소멸 exit( ), kill(), 비정상적인작업을수행에의해소멸 do_exit( ) kernel/exit.c (kernel/exit.c 976 행 ) 프로세스에게할당된각종자료구조들을해제 프로세스를좀비 (zombie) 상태로변경 스케줄러호출 do_exit 주요코드 1 현재태스크를 tsk 변수에저장 NORET_TYPE TYPE void do_exit(long code) { struct task_struct *tsk = current; 2 현재태스크의타이머를중지시킴 del_timer_sync(&tsk->real_timer); 32
33 Section 03 프로세스생성과소멸 Section 03 3 태스크가사용하던가상메모리해제 exit_mm(tsk); 4 세마포어큐에서제거 sem_exit(); 5 태스크가열었던파일디스크립터제거 exit_files(tsk); 6 파일시스템정보제거 exit_fs(tsk); 7 네임스페이스정보제거 exit_namespace(tsk); 8 시그널의핸들러제거 exit_sighand(tsk); 33
34 Section 03 프로세스생성과소멸 Section 03 9 태스크가세션리더인경우가상터미널해제 disassociate_ctty(1); 10 태스크가사용하던모듈이있으면참조횟수를감소시킴 if (tsk->binfmt && tsk->binfmt->module) MOD_DEC_USE_COUNT(tsk->binfmt->module); 11 프로세스종료통보 exit_notify(); 12 스케줄러호출 schedule(); 34
35 Section 04 프로세스상태와전이 Section 04 태스크전이과정 [ 그림 5-5] 태스크상태와전이 [ 그림 5-6] #man ps 내의태스크상태설명부분 35
36 Section 05 스케줄링 스케줄링 실행큐에들어있는실행가능한태스크중한태스크에게 CPU 할당 schedule() hdl() kernel/sched.c FIFO, 라운드로빈, 우선순위방식사용 task_struct 내의 priority 변수 SCHED_FIFO 실시간태스크를위한정책, 높은우선순위할당, 비선점 SCHED_RR 실시간태스크를위한정책, 높은우선순위할당, 선점, 라운드-로빈방식, rt_priority 변수사용 SCHED_OTHER 비실시간의일반태스크들을위한정책, 참고 : 커널 2.6 에서는 SCHED_ NORMAL로이름이변경 36
37 Section 05 스케줄링 비실시간태스크의우선순위 -20~19 ( 값이작을수록높은우선순위를가짐, 기본값 0 ) $ ps el more 로확인 (BSD 포맷 :$ps ax more) $ man ps로출력의미확인 task_struct 내의 nice 변수 DEF_NICE 기본우선순위값을설정하는매크로 task_struct 내의 nice 변수 [2.6] #define TASK_NICE(p) PRIO_TO_NICE((p)->static_prio) tti i)(kernel/sched.c hd 89행 ) 우선순위를높이는명령예 : $ nice --20 test (super user 만가능 ) 일반사용자는우선순위낮춰실행시키는것만가능 : $ nice -5 sleep 100 & 우선순위와관련된시스템콜 setpriority(), getpriority(), sched_setparam(), sched_getparam() 스케줄링정책과관련된시스템콜 sched_setscheduler() 와 sched_getscheduler() 37
38 Section 05 스케줄링 $ man ps PROCESS STATE CODES Here are the different values that the s, stat and state output specifiers (header "STAT" or "S") will display to describe the state of a process. D Uninterruptible sleep (usually IO) R Running or runnable (on run queue) S Interruptible sleep (waiting for an event to complete) T Stopped, either by a job control signal or because it is being traced. W paging (not valid since the 2.6.xx kernel) X dead (should never be seen) Z Defunct ("zombie") process, terminated but not reaped by its parent. For BSD formats and when the stat keyword is used, additional characters may be displayed: < high-priority (not nice to other users) N low-priority y( (nice to other users) L has pages locked into memory (for real-time and custom IO) s is a session leader l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do) + is in the foreground process group 38
39 Section 05 스케줄링 기본 (default) 타임퀀텀 : 100 millisec DEF_TIMESLICE 매크로 (kernel/sched.c 114행 ) #define DEF_TIMESLICE (100 * HZ / 1000) ( 예 ) Hz : 100, 1틱 = 1/100 = 10ms 최대할당타임퀀텀 MAX_COUNTER 매크로 우선순위에따라타임퀀텀을달리설정 (kernel/sched.c 87 행 ) /* * Convert user-nice values [ ] * to static priority [ MAX_RT_PRIO..MAX_PRIO-1 ], * and back. */ #define NICE_TO_PRIO(nice) (MAX_RT_PRIO + (nice) + 20) #define PRIO_TO_NICE(prio) ((prio) - MAX_RT_PRIO - 20) #define TASK_NICE(p) PRIO_TO_NICE((p)->static_prio) 39
40 Section 06 시그널 시그널 태스크들간통신을위한 IPC(Inter Process Communication) 기법중하나시그널종류 include/asm-i386/signal.h [2.6] arch/x86/include/asm/signal.hh [ 그림 5-7] #kill -l 수행화면 40
41 Section 06 시그널 시그널과관련된시스템콜 태스크들간통신을위한 IPC(Inter Process Communication) 기법중하나시그널종류 include/asm-i386/signal.h [2.6] arch/x86/include/asm/signal.hh [ 표 5-1] 시그널과관련된시스템콜 이름 sys_kill() 처리내용 시그널전달 sys_signal() 시그널과관련된동작설명 ( 핸들러설정 ) sys_sigaction() 시그널과관련된동작설명 ( 핸들러설정 ) sys_sigpending() sigpending() sys_sigprocmask() sys_sgetmask() sys_ssetmask() sys_rt_sigaction() sys_rt_sigqueueinfo() sys_rt_sigprocmask() sys_rt_sigpending() sigpending() sys_rt_sigtimewait() pending 된시그널존재여부검사블록된시그널목록수정블록된시그널의마스크값획득블록된시그널의마스크값설정실시간시그널과관련되어취해야할 action 설정실시간시그널전달블록된실시간시그널목록변경 pending 된실시간시그널존재여부검사실시간시그널에 timeout을설정하여대기 41
42 Section 06 시그널 시그널처리를위한 3 가지기능 시그널전송기능 시그널수신기능 시그널처리기능 시그널전송 일반태스크에서시그널을보내는시스템콜 kill() sys_kill() 커널에서시그널을보내는함수 force_sig() send_sig_info() 시그널을보내는쪽은단지 시그널을통보할뿐임 [ 그림 5-8] 시그널전송시함수호출흐름 42
43 Section 06 시그널 send_signal() 시그널번호와관련정보및수신태스크 (task_struct의 sigpending 구조체 ) 를인수로받아수신태스크에게시그널이도착했음을알림 1 현재시스템에존재하는시그널의개수가제한된수보다적다면시그널큐에삽입할노드를생성 제한된수 : max_queued_signal = 1024 로정의 2 이노드에시그널번호를포함하여관련정보들을저장한다음시그널큐의꼬리에삽입 이때관련정보에는커널이전송하였는지사용자태스크에서전송하였는지의정보도포함 3 시그널의종류를구분하기위한자료구조 (sigset_t t signal) 에관련비트를표시 43
44 Section 06 시그널시그널수신 시그널을받을수있는자료구조필요 int sigpending; struct signal_struct *sig; sigset_t blocked; struct sigpending pending; sig : 시그널을받았을때처리할핸들러정보저장 pending : 시그널처리를기다리는시그널저장 시그널전송부분에서노드를만들어이곳의연결리스트에추가 sigpending : 블록되지않은대기중인시그널이있는지표시 blocked : 블록된시그널을표시 44
45 Section 06 시그널시그널관련자료구조 [ 그림 5-9] 시그널관련자료구조 45
46 Section 06 시그널 sigpending 구조체 include/linux/signal.h head : 시그널큐의첫번째노드를가리키는변수 tail : 수신된시그널의마지막노드를가리키는변수 signal : pending된시그널을비트마스크하기위한변수 struct sigpending { struct sigqueue *head, **tail; sigset _ t signal; }; sigqueue 구조체 next : 시그널큐의다음노드를가리키기위한변수 시그널큐의마지막노드의 next 포인터는 NULL info : 수신된시그널의정보를담는변수 struct sigqueue { struct sigqueue *next; siginfo_t info; }; 46
47 Section 06 시그널 sigset_t 구조체 _NSIG : 시스템내의총시그널개수 sigset_t t 에 64bit 의공간을할당하여각시그널에대응하는비트를마스크 이구조체를사용하는 blocked 변수는블록된시그널을해당비트에표시하여블록된시그널이발생할경우해당시그널의블로킹이해제될때까지대기상태로있도록한다. k_sigaction 구조체의 sa_mask 변수도이구조체로되어있는데이는시그널핸들러가수행될때블록시킬시그널을비트마스크하기위한용도다 #define _NSIG 64 #define _NSIG_BPW 32 #define _NSIG_WORDS (_NSIG / _NSIG_BPW) typedef struct { unsigned long sig[_nsig_words]; } sigset_t 47
48 Section 06 시그널 signal_struct 구조체 include/linux/sched.h 427 행에정의 1273 행 task_struct 에서사용 count t: 이구조체를공유하는태스크의수 siglock : 이구조체에배타적인접근을위해 lock을설정하는변수 action : k_sigaction 구조체 (arch/x86/include/asm/signal.h 144행 ) 로선언되어있으며다시 sa 변수를사용하여 sigaction i 구조체를가짐 64개의배열로구성되고수신한각시그널에대한처리방법을저장 처리방법» 시그널의블록이해제된후처리» 시그널무시» 시그널처리 struct sighand_struct { atomic_t count; struct k_sigaction action[_nsig]; spinlock_t siglock; wait_queue_head_t signalfd_wqh; }; 48
49 Section 06 시그널 sigaction 구조체 (arch/x86/include/asm/signal.h 137 행 ) sa_handler : 시그널핸들러를가리키는변수 만약핸들러가지정되지않은경우는기본동작을지시 (SIG_DFL) 하거나무시 (SIG_IGN) 하는값을갖는다. sa_flags : 시그널처리방법을지시하는플래그값이다. SA_SIGINFOSIGINFO» 시그널처리기가한개가아닌 3개의인수를취한다. 이경우, sa_handler 대신에 sa_sigaction 이설정되어야한다. (sa_sigaction 필드는리눅스 에서추가되었다.) sa_restorer : 사용되지않음 sa_mask : 시그널을마스킹하는데사용 struct sigaction { }; sighandler_t sa_handler; unsigned long sa_flags; sigrestore_t sa_restorer; sigset_t sa_mask; /* mask last for extensibility */ struct k_sigaction { }; struct sigaction sa; 49
50 Section 06 시그널 시그널처리 커널은시그널이발생하면즉각처리하지않음 커널모드에서인터럽트나예외를처리하고난후사용자모드로돌아갈때처리할시그널이존재하는지확인 ENTRY(ret_from_sys_call) cli # need_resched and signals atomic test... cmpl $0,sigpending(%ebx) jne signal_return... signal_return:... call SYMBOL_NAME(do_signal) jmp restore_all 50
51 Section 06 시그널 do_signal( ) arch/i386/kernel/signal.c [2.6] arch/x86/kernel/signal.c l 916 행 [ 그림 5-10] 시그널처리흐름 51
52 Section 06 시그널 SIG_DFL 기본처리 Terminate : 태스크를종료시킴 Dump : 태스크를종료시키고 Core Dump 함 Stop : 태스크의수행을중지시킴 Continue : 태스크수행재개 52
53 [ 실습 5-3] 시그널전송및처리 문제 사용자프로그램에서시그널핸들러를설정하고시그널을수신하였을때정의된시그널핸들러가수행되도록하자. (1) 시그널수신용응용프로그램작성 01 #include <stdio.h> 02 #include <signal.h> 03 #include <unistd.h> void signal_handler(int); void main( ) 08 { 09 int c; 10 int pid; 11 pid = getpid(); 12 printf( "pid = %d \n", pid ); signal(sigusr1, signal_handler); 15 signal(sigint, signal_handler ); [ 소스 5-6] 16 while ((c=getchar( ))!='\n') ; 17 } 18 void signal_handler(int signo ) 19 { 20 switch(signo) 21 { 22 case SIGUSR1: 23 printf("received SIGUSR1 \n"); 24 break; 25 case SIGINT: 26 printf("received SIGINT \n"); 27 break; 28 } 29 } 53
54 [ 실습 5-3] 시그널전송및처리 1 12 행 : 시그널을보낼태스크에서이태스크의 PID 를사용하기위해실행시 PID 를출력하도록한다 행 ~15 행 :SIGUSR1 과 SIGINT 시그널이수신되면이를처리할핸들러를 signal_handler 함수로지정한다. 예 사용자가 ctrl+c 를누르면 SIGINT 시그널이발생하는데, 이핸들러가지정되어있지않으면기본처리로태스크가종료됨 핸들러의지정에따라콘솔에문자열을출력할뿐태스크가종료되지않음. 3 16행 : 사용자가 Enter 키를입력할때까지무한루프를실행하며시그널대기 4 20행 ~28행 : 사용자가지정한두개의시그널에대해처리하는시그널핸들러. 시그널번호에따라 case 문을수행한다. 54
55 [ 실습 5-3] 시그널전송및처리 (2) 시스템송신용응용프로그램작성 01 #include <stdio.h> 02 #include <signal.h> 03 #include <unistd.h> 04 int count=0; 05 main(int argc, int *argv[ ]) 06 { 07 int c; 08 int rec_pid; rec_pid = atoi(argv[1]); 11 for(c=0; c<10; c++) { 12 kill(rec_pid, SIGUSR1 ); 13 sleep(1); 14 } 15 } [ 소스 5-7] 55
56 [ 실습 5-3] 시그널전송및처리 (3) 컴파일및실행 두응용프로그램을컴파일하고실행 두개의터미널을띄워각각을실행하여해당문자열이출력되는지확인. 수신용태스크실행화면에서 ctrl+c를눌러시그널핸들러의작동여부확인. [ 수신태스크실행화면 ] [ 송신태스크실행화면 ] 56
57 [ 실습 5-4] sigaction 시스템콜을이용한시스템핸들러설정 문제 sigaction 시스템콜을사용하여응용프로그램에서시그널핸들러를지정하는방법과지정된시그널을무시하거나원래의기본처리형태를지정하는방법을알아본다. (1) 응용프로그램작성 01 #include <stdio.h> 02 #include <signal.h> 03 #include <unistd.h> 04 int count=0; 05 void signal_handler(int); 06 main( ) 07 { 08 struct sigaction sact; printf( "(1) Ignore SIGINT signal \n" ); 11 sact.sa_handler = SIG_IGN; 12 sigaction(sigint, &sact, NULL); 13 while ((c=getchar( ))!='\n'); 14 [ 소스 5-8] 57
58 [ 실습 5-4] sigaction 시스템콜을이용한시스템핸들러설정 (1) 응용프로그램작성 ( 계속 ) 15 printf( "(2) User defined Handler \n" ); 16 sact.sa_handler = signal_handler; 17 sact.sa_flags = SA_SIGINFO; 18 sigaction(sigint, &sact, NULL); 19 while ((c=getchar())!='\n'); printf( "(3) default SIGINT signal processing \n" ); 22 sact.sa_handler = SIG_DFL; 23 sigaction(sigint, &sact, NULL); 24 while ((c=getchar())!='\n'); } 27 void signal_handler() 28 { 29 printf("received SIGINT \n"); 30 } [ 소스 5-8] 58
59 [ 실습 5-4] sigaction 시스템콜을이용한시스템핸들러설정 1 10 행 ~13 행 : 시그널무시를지정하는부분 사용자가 Enter 키를누를때까지 while 루프를돌면서시그널을대기한다. 만약 ctrl+c 를눌러 SIGINT 시그널을받더라도 sa_handler = SIG_IGNIGN 로설정하였으므로무시된다. 2 15행 ~19행 : 사용자가정의한핸들러를수행 Enter 키를눌러다음문으로넘어가기전에는지정된핸들러를통해 SIGINT 시그널을처리한다 행 ~ 24 행 : 원래의기본처리방법지정 ctrl+c 가눌려지면기본처리에따라태스크는종료할것이다. (2) 실행및결과확인 59
좀비프로세스 2
Signal & Inter-Process Communication Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 좀비프로세스 2 좀비프로세스 (zombie process) 좀비프로세스란프로세스종료후메모리상에서사라지지않는프로세스 좀비프로세스의생성이유. 자식프로세스는부모프로세스에게실행결과에대한값을반환해야한다.
1장. 유닉스 시스템 프로그래밍 개요
Unix 프로그래밍및실습 7 장. 시그널 - 과제보충 응용과제 1 부모프로세스는반복해서메뉴를출력하고사용자로부터주문을받아자식프로세스에게주문내용을알린다. (SIGUSR1) ( 일단주문을받으면음식이완료되기전까지 SIGUSR1 을제외한다른시그널은모두무시 ) timer 자식프로세스는주문을받으면조리를시작한다. ( 일단조리를시작하면음식이완성되기전까지 SIGALARM 을제외한다른시그널은모두무시
Chap04(Signals and Sessions).PDF
Signals and Session Management 2002 2 Hyun-Ju Park (Signal)? Introduction (1) mechanism events : asynchronous events - interrupt signal from users : synchronous events - exceptions (accessing an illegal
6주차.key
6, Process concept A program in execution Program code PCB (process control block) Program counter, registers, etc. Stack Heap Data section => global variable Process in memory Process state New Running
슬라이드 1
프로세스 (Process) (1) Chapter #5 Process 정의 Process 구조 Process Context Process Scheduling 강의목차 Unix System Programming 2 Program( 프로그램 ) Process 정의 (1) 기계어명령어와데이터를모아놓은실행파일 C 언어등프로그램언어로작성된소스파일을컴파일링하여생성 COFF(Common
Chapter #01 Subject
Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned
본 강의에 들어가기 전
유닉스프로그래밍및실습 9 장. 시그널 1. 시그널개념 시그널생명주기 시그널이발생한다. 커널이해당시그널을쌓아둔다.( 동일한시그널이오는경우하나만 ) 가능한시점에서커널이적절하게처리한다 커널의처리방법 시그널무시 아무런동작을하지않는다 절대무시할수없는시그널 SIGKILL SIGSTOP 시그널을붙잡아처리 현재코드경로를따라가는실행을중단하고, 시그널마다등록된함수로점프 기본동작
Microsoft PowerPoint - 10_Signal
Operating System Laboratory 시그널 - IPC - 시그널의종류 - 시그널구현함수 IPC 프로세스간통신 (Inter-Process Communication) 실행중인프로세스간에데이터를주고받는기법 IPC 에는매우많은방법이있다! File Pipe/Named pipe Socket Shared memory Message passing Remote
/chroot/lib/ /chroot/etc/
구축 환경 VirtualBox - Fedora 15 (kernel : 2.6.40.4-5.fc15.i686.PAE) 작동 원리 chroot유저 ssh 접속 -> 접속유저의 홈디렉토리 밑.ssh의 rc 파일 실행 -> daemonstart실행 -> daemon 작동 -> 접속 유저만의 Jail 디렉토리 생성 -> 접속 유저의.bashrc 의 chroot 명령어
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수
리눅스 프로세스 관리
프로세스 (Process) Process 프로그램이나명령어를실행하면메모리에적재되어실제로실행되고있는상태를의미 이러한프로세스들은프로세스가시작하면서할당받는프로세스식별번호인 PID(Process ID), 해당프로세스를실행한부모프로세스를나타내는 PPID(Parent Process ID), UID 와 GID 정보를통해해당프로세스가어느사용자에속해있는지, 프로세스가파일에대해갖는권한및프로세스가실행된터미널,
슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100
2015-1 프로그래밍언어 9. 연결형리스트, Stack, Queue 2015 년 5 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) 연결리스트 (Linked List) 연결리스트연산 Stack
A Hierarchical Approach to Interactive Motion Editing for Human-like Figures
단일연결리스트 (Singly Linked List) 신찬수 연결리스트 (linked list)? tail 서울부산수원용인 null item next 구조체복습 struct name_card { char name[20]; int date; } struct name_card a; // 구조체변수 a 선언 a.name 또는 a.date // 구조체 a의멤버접근 struct
<4D F736F F F696E74202D BDC3B1D7B3CEB0FA20BDC3B1D7B3CE20C3B3B8AE2E707074>
10 장시그널과시그널처리 시그널과시그널처리 - sigemptyset, sigfillset - sigaddset, sigdelset, sigismember - sigaction - sigprocmask - kill, raise - alarm - pause 1 1. 서론 시그널의종류 이름설명 DA SIGABRT abort() 를호출할때발생 SIGALRM 설정된알람시간이경과한겨우발생
ABC 11장
12 장고급응용 0 수행중인프로그램 프로세스 모든프로세스는유일한프로세스식별번호 (PID) 를가짐 유닉스에서는 ps 명령을사용하여프로세스목록을볼수있음 12-1 프로세스 $ ps -aux USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND blufox 17725 34.0 1.6 146 105 i2 R 15:13 0:00
Microsoft PowerPoint - Chapter_02.pptx
1 Task Management March, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj Program & Process 2 Task, Process and Thread 3 Process Thread Task, Process and Thread 4 Process
Microsoft PowerPoint - Lecture_Note_7.ppt [Compatibility Mode]
Unix Process Department of Computer Engineering Kyung Hee University. Choong Seon Hong 1 유닉스기반다중서버구현방법 클라이언트들이동시에접속할수있는서버 서비스를동시에처리할수있는서버프로세스생성을통한멀티태스킹 (Multitasking) 서버의구현 select 함수에의한멀티플렉싱 (Multiplexing)
chap 5: Trees
5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경
제1장 Unix란 무엇인가?
1 시그널 2 11.1 시그널 시그널 시그널은예기치않은사건이발생할때이를알리는소프트웨어인터럽트이다. 시그널발생예 SIGFPE 부동소수점오류 SIGPWR 정전 SIGALRM 알람시계울림 SIGCHLD 자식프로세스종료 SIGINT 키보드로부터종료요청 (Ctrl-C) SIGSTP 키보드로부터정지요청 (Ctrl-Z) 3 주요시그널 시그널이름 의미 기본처리 SIGABRT
임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 1/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 시스템호출개요 리눅스에서는사용자공간과커널공간을구분 사용자프로그램은사용자모드, 운영체제는커널모드에서수행 커널공간에대한접근은커널 ( 특권, priviledged) 모드에서가능 컴퓨팅자원 (CPU, memory, I/O 등 ) 을안전하게보호 커널수행을안전하게유지
PowerPoint 프레젠테이션
7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment
Chapter 4. LISTS
C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or
K&R2 Reference Manual 번역본
typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct
PowerPoint 프레젠테이션
7-Segment Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 6-Digit 7-Segment LED Controller 16비트로구성된 2개의레지스터에의해제어 SEG_Sel_Reg(Segment
PowerPoint 프레젠테이션
KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된
PowerPoint 프레젠테이션
7-SEGMENT DEVICE CONTROL - DEVICE DRIVER Jo, Heeseung 디바이스드라이버구현 : 7-SEGMENT HBE-SM5-S4210 의 M3 Module 에는 6 자리를가지는 7-Segment 모듈이아래그림처럼실장 6 Digit 7-Segment 2 디바이스드라이버구현 : 7-SEGMENT 6-Digit 7-Segment LED
PowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
11장 포인터
Dynamic Memory and Linked List 1 동적할당메모리의개념 프로그램이메모리를할당받는방법 정적 (static) 동적 (dynamic) 정적메모리할당 프로그램이시작되기전에미리정해진크기의메모리를할당받는것 메모리의크기는프로그램이시작하기전에결정 int i, j; int buffer[80]; char name[] = data structure"; 처음에결정된크기보다더큰입력이들어온다면처리하지못함
Microsoft PowerPoint - SP6장-시그널.ppt [호환 모드]
UNIX System Programming Ki-Hyun, JUNG Email : kingjung@paran.com 구성 1 장 : 기본적인개념들과기초적인용어들 2 장 : 파일을다루는시스템호출 primitives 3 장 : 파일에대한문맥상의특성 4 장 : 유닉스디렉토리개념 5 장 : 유닉스프로세스의기본적인성질과제어 6 장 : 프로세스간통신 7 장 : 유용한유닉스프로세스간통신기법
리눅스커널-06
C h a p t e r 06 CPU CPU CPU 1MB 600KB 500KB 4GB 512MB 1GB 230 231 Virtual Memory Physical Memory Virtual address Physical address 0 CPU 4GB 3GB 1GB 61 init proc1maps cat 0x08048000 0xC0000000 0x08048000
<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>
연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.
Lab 3. 실습문제 (Single linked list)_해답.hwp
Lab 3. Singly-linked list 의구현 실험실습일시 : 2009. 3. 30. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 5. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Singly-linked list의각함수를구현한다.
KEY 디바이스 드라이버
KEY 디바이스드라이버 임베디드시스템소프트웨어 I (http://et.smu.ac.kr et.smu.ac.kr) 차례 GPIO 및 Control Registers KEY 하드웨어구성 KEY Driver 프로그램 key-driver.c 시험응용프로그램 key-app.c KEY 디바이스드라이버 11-2 GPIO(General-Purpose Purpose I/O)
PowerPoint 프레젠테이션
Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi
Microsoft PowerPoint - LN_5_Linux_Task.ppt [호환 모드]
프로젝트 1 Linux Task Management 단국대학교컴퓨터학과 2009 백승재 ibanez1383@dankook.ac.kr k k http://embedded.dankook.ac.kr/~ibanez1383 Linux 의 task 개념이해 강의목표 Task 자료구조파악 Linux 의 task 관리방법파악 Task, Process and Thread 3
Sena Technologies, Inc. HelloDevice Super 1.1.0
HelloDevice Super 110 Copyright 1998-2005, All rights reserved HelloDevice 210 ()137-130 Tel: (02) 573-5422 Fax: (02) 573-7710 E-Mail: support@senacom Website: http://wwwsenacom Revision history Revision
PowerPoint 프레젠테이션
Network Programming Jo, Heeseung Network 실습 네트워크프로그래밍 멀리떨어져있는호스트들이서로데이터를주고받을수있도록프로그램을구현하는것 파일과는달리데이터를주고받을대상이멀리떨어져있기때문에소프트웨어차원에서호스트들간에연결을해주는장치가필요 이러한기능을해주는장치로소켓이라는인터페이스를많이사용 소켓프로그래밍이란용어와네트워크프로그래밍이랑용어가같은의미로사용
<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>
#include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0
BMP 파일 처리
BMP 파일처리 김성영교수 금오공과대학교 컴퓨터공학과 학습내용 영상반전프로그램제작 2 Inverting images out = 255 - in 3 /* 이프로그램은 8bit gray-scale 영상을입력으로사용하여반전한후동일포맷의영상으로저장한다. */ #include #include #define WIDTHBYTES(bytes)
PowerPoint 프레젠테이션
UNIX 및실습 8 장. 프로세스와사용자 명령익히기 1 학습목표 유닉스에서프로세스가무엇인지그개념을이해한다. 프로세스와관련된유닉스명령의사용방법을익힌다. 포그라운드처리와백그라운드처리의차이를이해한다. 사용자정보를보는명령의사용방법을익힌다. 2 01. 프로세스의개념과종류 프로세스 (process) 현재시스템에서실행중인프로그램 프로세스는고유번호를가진다. Process
커알못의 커널 탐방기 이 세상의 모든 커알못을 위해서
커알못의 커널 탐방기 2015.12 이 세상의 모든 커알못을 위해서 개정 이력 버전/릴리스 0.1 작성일자 2015년 11월 30일 개요 최초 작성 0.2 2015년 12월 1일 보고서 구성 순서 변경 0.3 2015년 12월 3일 오탈자 수정 및 글자 교정 1.0 2015년 12월 7일 내용 추가 1.1 2015년 12월 10일 POC 코드 삽입 및 코드
03_queue
Queue Data Structures and Algorithms 목차 큐의이해와 ADT 정의 큐의배열기반구현 큐의연결리스트기반구현 큐의활용 덱 (Deque) 의이해와구현 Data Structures and Algorithms 2 큐의이해와 ADT 정의 Data Structures and Algorithms 3 큐 (Stack) 의이해와 ADT 정의 큐는 LIFO(Last-in,
10.
10. 10.1 10.2 Library Routine: void perror (char* str) perror( ) str Error 0 10.3 10.3 int fd; /* */ fd = open (filename, ) /*, */ if (fd = = -1) { /* */ } fcnt1 (fd, ); /* */ read (fd, ); /* */ write
PowerPoint 프레젠테이션
Text-LCD Device Control - Device driver Jo, Heeseung M3 모듈에장착되어있는 Tedxt LCD 장치를제어하는 App 을개발 TextLCD 는영문자와숫자일본어, 특수문자를표현하는데사용되는디바이스 HBE-SM5-S4210 의 TextLCD 는 16 문자 *2 라인을 Display 할수있으며, 이 TextLCD 를제어하기위하여
Lab 4. 실습문제 (Circular singly linked list)_해답.hwp
Lab 4. Circular singly-linked list 의구현 실험실습일시 : 2009. 4. 6. 담당교수 : 정진우 담당조교 : 곽문상 보고서제출기한 : 2009. 4. 12. 학과 : 학번 : 성명 : 실습과제목적 : 이론시간에배운 Circular Singly-linked list를실제로구현할수있다. 실습과제내용 : 주어진소스를이용해 Circular
System Programming Lab
System Programming Lab Week 4: Shell Schedule for your own shell 1 st shell 기본기능 fork / exec Background Processing/ Sequential Execution ls, find, grep 2 nd Environment variables/ Shell variables built-in
2009년 상반기 사업계획
시그널 IT CookBook, 유닉스시스템프로그래밍 학습목표 시그널의기본개념을이해한다. 시그널을보내는방법을이해한다. 시그널을받아서처리하는기본적인방법을이해한다. 시그널집합의개념과사용방법을이해한다. sigaction 함수를사용해시그널을처리하는방법을이해한다. 알람시그널의처리방법을이해한다. 시그널관련기타함수들의사용방법을이해한다. 2/38 목차 시그널의개념 시그널의종류
<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
Microsoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>
Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법
Microsoft PowerPoint - ch07_시그널 [호환 모드]
학습목표 시그널의기본개념을이해한다. 시그널을보내는방법을이해한다. 시그널을받아서처리하는기본적인방법을이해한다. 시그널집합의개념과사용방법을이해한다. sigaction 함수를사용해시그널을처리하는방법을이해한다. 알람시그널의처리방법을이해한다. 시그널관련기타함수들의사용방법을이해한다. 시그널 IT CookBook, 유닉스시스템프로그래밍 2/38 목차 시그널의개념 시그널의종류
[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi
2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,
2009년 상반기 사업계획
소켓프로그래밍활용 IT CookBook, 유닉스시스템프로그래밍 학습목표 소켓인터페이스를활용한다양한프로그램을작성할수있다. 2/23 목차 TCP 기반프로그래밍 반복서버 동시동작서버 동시동작서버-exec함수사용하기 동시동작서버-명령행인자로소켓기술자전달하기 UDP 프로그래밍 3/23 TCP 기반프로그래밍 반복서버 데몬프로세스가직접모든클라이언트의요청을차례로처리 동시동작서버
강의10
Computer Programming gdb and awk 12 th Lecture 김현철컴퓨터공학부서울대학교 순서 C Compiler and Linker 보충 Static vs Shared Libraries ( 계속 ) gdb awk Q&A Shared vs Static Libraries ( 계속 ) Advantage of Using Libraries Reduced
untitled
Step Motor Device Driver Embedded System Lab. II Step Motor Step Motor Step Motor source Embedded System Lab. II 2 open loop, : : Pulse, 1 Pulse,, -, 1 +5%, step Step Motor (2),, Embedded System Lab. II
Microsoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
Chapter 4. LISTS
6. 동치관계 (Equivalence Relations) 동치관계 reflexive, symmetric, transitive 성질을만족 "equal to"(=) 관계는동치관계임. x = x x = y 이면 y = x x = y 이고 y = z 이면 x = z 동치관계를이용하여집합 S 를 동치클래스 로분할 동일한클래스내의원소 x, y 에대해서는 x y 관계성립
제1장 Unix란 무엇인가?
1 12 장파이프 2 12.1 파이프 파이프원리 $ who sort 파이프 3 물을보내는수도파이프와비슷 한프로세스는쓰기용파일디스크립터를이용하여파이프에데이터를보내고 ( 쓰고 ) 다른프로세스는읽기용파일디스크립터를이용하여그파이프에서데이터를받는다 ( 읽는다 ). 한방향 (one way) 통신 파이프생성 파이프는두개의파일디스크립터를갖는다. 하나는쓰기용이고다른하나는읽기용이다.
제9장 프로세스 제어
제 9 장프로세스제어 리눅스시스템프로그래밍 청주대학교전자공학과 한철수 제 9 장 목차 프로세스생성 프로그램실행 입출력재지정 프로세스그룹 시스템부팅 2 9.1 절 프로세스생성 fork() 시스템호출 새로운프로그램을실행하기위해서는먼저새로운프로세스를생성해야하는데, fork() 시스템호출이새로운프로세스를생성하는유일한방법임. 함수프로토타입 pid_t fork(void);
PowerPoint 프레젠테이션
C 언어포인터정복하기 16 강. 포인터로자료구조화하기 TAE-HYONG KIM COMPUTER ENG, KIT 2 학습내용 구조체멤버와구조체포인터멤버 다른구조체 ( 변수 ) 를가리키는구조체 ( 변수 ) 연결된리스트 의구성및관리 포인터로 연결된리스트 탐색하기 3 중첩구조체에자료저장하기 중첩된구조체변수에값저장하기 struct person { char PRID[15];
Microsoft PowerPoint - chap13-입출력라이브러리.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 스트림의 기본 개념을 알아보고,
The Pocket Guide to TCP/IP Sockets: C Version
인터넷프로토콜 6 장 중급소켓프로그래밍 (2) 목차 제 6 장중급소켓프로그래밍 6.1 소켓옵션 6.2 시그널 6.3 넌블로킹입 / 출력 6.4 멀티태스킹 6.5 멀티플렉싱 6.6 다수의수신자처리 2 시그널 (Signal) 시그널이란? 예상치않은이벤트발생에따른일종의소프트웨어인터럽트 Ex) ctrl + c, ctrl + z, 자식프로세스의종료 외부에서프로세스에게전달할수있는유일한통로
<4D F736F F F696E74202D FC7C1B7CEBCBCBDBA20BBFDBCBAB0FA20BDC7C7E0205BC8A3C8AF20B8F0B5E55D>
학습목표 프로세스를생성하는방법을이해한다. 프로세스를종료하는방법을이해한다. exec함수군으로새로운프로그램을실행하는방법을이해한다. 프로세스를동기화하는방법을이해한다. 프로세스생성과실행 IT CookBook, 유닉스시스템프로그래밍 2/24 목차 프로세스생성 프로세스종료함수 exec 함수군활용 exec 함수군과 fork 함수 프로세스동기화 프로세스생성 [1] 프로그램실행
2009년 상반기 사업계획
프로세스생성과실행 IT CookBook, 유닉스시스템프로그래밍 학습목표 프로세스를생성하는방법을이해한다. 프로세스를종료하는방법을이해한다. exec함수군으로새로운프로그램을실행하는방법을이해한다. 프로세스를동기화하는방법을이해한다. 2/24 목차 프로세스생성 프로세스종료함수 exec 함수군활용 exec 함수군과 fork 함수 프로세스동기화 3/24 프로세스생성 [1]
<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>
2006 년 2 학기윈도우게임프로그래밍 제 8 강프레임속도의조절 이대현 한국산업기술대학교 오늘의학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용한다. FPS(Frame Per Sec)
chap7.key
1 7 C 2 7.1 C (System Calls) Unix UNIX man Section 2 C. C (Library Functions) C 1975 Dennis Ritchie ANSI C Standard Library 3 (system call). 4 C?... 5 C (text file), C. (binary file). 6 C 1. : fopen( )
Microsoft PowerPoint - 09-Pipe
9. 파이프 상명대학교소프트웨어학부 파이프 시그널은이상한사건이나오류를처리하는데는이용하지만, 한프로세스로부터다른프로세스로대량의정보를전송하는데는부적합하다. 파이프 한프로세스를다른관련된프로세스에연결시켜주는단방향의통신채널 2 pipe() Usage #include int pipe(int filedes[2]); 3 < ex_1.c > #include
슬라이드 1
CHAP 6: 큐 yicho@gachon.ac.kr 1 큐 (QUEUE) 큐 : 먼저들어온데이터가먼저나가는자료구조 선입선출 (FIFO: First-In First-Out) ( 예 ) 매표소의대기열 Ticket Box 전단 () 후단 () 2 큐 ADT 삽입과삭제는 FIFO 순서를따른다. 삽입은큐의후단에서, 삭제는전단에서이루어진다. 객체 : n 개의 element
A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning
C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용
- 코드로읽는리눅스디바이스드라이버 강남용
- 코드로읽는리눅스디바이스드라이버 - 2011.1.3 강남용 (nykang@ssu.ac.kr) 커널스레드 스레드란? 스레드종류 도우미인터페이스 연결리스트 해시리스트 작업큐 통지연쇄 완료인터페이스 kthread 도우미 오류처리지원 ( 원시코드살펴보기 ) 2 스레드란? - 하나의프로그램내에서실행되는함수를의미 - 일반적인프로세서의경우는한순간에하나의함수만실행되지만,
Embeddedsystem(8).PDF
insmod init_module() register_blkdev() blk_init_queue() blk_dev[] request() default queue blkdevs[] block_device_ops rmmod cleanup_module() unregister_blkdev() blk_cleanup_queue() static struct { const
Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600
균형이진탐색트리 -VL Tree delson, Velskii, Landis에의해 1962년에제안됨 VL trees are balanced n VL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at
슬라이드 1
마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***
교육지원 IT시스템 선진화
Module 16: ioctl 을활용한 LED 제어디바이스드라이버 ESP30076 임베디드시스템프로그래밍 (Embedded System Programming) 조윤석 전산전자공학부 주차별목표 ioctl() 을활용법배우기 커널타이머와 ioctl 을활용하여 LED 제어용디바이스드라이브작성하기 2 IOCTL 을이용한드라이버제어 ioctl() 함수활용 어떤경우에는읽는용도로만쓰고,
Microsoft PowerPoint - [2009] 02.pptx
원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include
금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE
ALTIBASE HDB 6.3.1.10.1 Patch Notes 목차 BUG-45710 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG-45730 ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG-45760 ROLLUP/CUBE 절을포함하는질의는 SUBQUERY REMOVAL 변환을수행하지않도록수정합니다....
윤성우의 열혈 TCP/IP 소켓 프로그래밍
C 프로그래밍프로젝트 Chap 22. 구조체와사용자정의자료형 1 2013.10.10. 오병우 컴퓨터공학과 구조체의정의 (Structure) 구조체 하나이상의기본자료형을기반으로사용자정의자료형 (User Defined Data Type) 을만들수있는문법요소 배열 vs. 구조체 배열 : 한가지자료형의집합 구조체 : 여러가지자료형의집합 사용자정의자료형 struct
Microsoft PowerPoint - chap10-함수의활용.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과
이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2
제 17 장동적메모리와연결리스트 유준범 (JUNBEOM YOO) Ver. 2.0 jbyoo@konkuk.ac.kr http://dslab.konkuk.ac.kr 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다. 이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다.
원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를
리스트에대한설명중틀린것은 구조체도리스트의요소가될수있다 리스트의요소간에는순서가있다 리스트는여러가지방법으로구현될수있다 리스트는집합과동일하다 다음은순차적표현과연결된표현을비교한것이다 설명이틀린것은 연결된표현은포인터를가지고있어상대적으로크기가작아진다 연결된표현은삽입이용이하다 순차적표현은연결된표현보다액세스시간이많이걸린다 연결된표현으로작성된리스트를 개로분리하기가쉽다 다음은연결리스트에서있을수있는여러가지경우를설명했는데잘못된항목은
슬라이드 1
2007 년 2 학기윈도우게임프로그래밍 제 7 강프레임속도의조절 이대현 핚국산업기술대학교 학습내용 프레임속도의조절 30fps 맞추기 스프라이트프레임속도의조절 프레임속도 (Frame Rate) 프레임속도란? 얼마나빨리프레임 ( 일반적으로하나의완성된화면 ) 을만들어낼수있는지를나타내는척도 일반적으로초당프레임출력횟수를많이사용핚다. FPS(Frame Per Sec)
<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>
1 #include 2 #include 3 #include 4 #include 5 #include 6 #include "QuickSort.h" 7 using namespace std; 8 9 10 Node* Queue[100]; // 추가입력된데이터를저장하기위한 Queue
Abstract View of System Components
Operating System 10 주차 - IPC(InterProcess Communication) - Real-Time Computing and Communications Lab. Hanyang University jtlim@rtcc.hanyang.ac.kr yschoi@rtcc.hanyang.ac.kr shpark@rtcc.hanyang.ac.kr Contents
Microsoft PowerPoint - ch07 - 포인터 pm0415
2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자
untitled
Embedded System Lab. II Embedded System Lab. II 2 RTOS Hard Real-Time vs Soft Real-Time RTOS Real-Time, Real-Time RTOS General purpose system OS H/W RTOS H/W task Hard Real-Time Real-Time System, Hard
금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음
Microsoft PowerPoint - chap11-포인터의활용.pptx
#include int main(void) int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; 1 학습목표 포인터를 사용하는 다양한 방법에
Microsoft PowerPoint - chap03-변수와데이터형.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.
10주차.key
10, Process synchronization (concurrently) ( ) => critical section ( ) / =>, A, B / Race condition int counter; Process A { counter++; } Process B { counter ;.. } counter++ register1 = counter register1
Microsoft PowerPoint - 10_Process
Linux 프로세스프로그래밍 Programming - 프로세스생성 : fork, exec - 프로세스동기화 : wait - 프로세스관리함수 프로세스관련함수 프로세스생성과종료 함수 의미 fork 자신과완전히동일한프로세스를생성한다. exec 계열지정한실행파일로부터프로세스를생성한다. exit 종료에따른상태값을부모프로세스에게전달하며프로세스를종료한다. atexit exit
3. 다음장에나오는 sigprocmask 함수의설명을참고하여다음프로그램의출력물과그출력물이화면이표시되는시점을예측하세요. ( 힌트 : 각줄이표시되는시점은다음 4 가지중하나. (1) 프로그램수행직후, (2) kill 명령실행직후, (3) 15 #include <signal.
학번 : 이름 : 1. 다음가정하에서아래프로그램의출력물을예측하세요. 가정 : 부모프로세스의 process id=20100, 자식프로세스의 process id=20101. int glob = 31; /* external variable in initialized data */ char buf[] = "a write to stdout\n"; int main(void)
Microsoft PowerPoint - chap9 [호환 모드]
제 9 장프로세스관계 숙대창병모 1 Contents 1. Logins 2. Process Groups 3. Sessions 4. Controlling Terminal 5. Job Control 숙대창병모 2 로그인 숙대창병모 3 터미널로그인 /etc/ttys: 1 line per terminal device getty: opens terminal device
슬라이드 1
6-1 리스트 (list) 란순서를가진항목들을표현하는자료구조 리스트를구현하는두가지방법 배열 (array) 을이용하는방법 구현간단 삽입, 삭제시오버헤드 항목의개수제한 연결리스트 (linked list) 를이용하는방법 구현복잡 삽입, 삭제가효율적 크기가제한되지않음 6-2 객체 : n 개의 element 형으로구성된순서있는모임 연산 : add_last(list,
비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2
비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,
본 강의에 들어가기 전
C 기초특강 종합과제 과제내용 구조체를이용하여교과목이름과코드를파일로부터입력받아관리 구조체를이용하여학생들의이름, 학번과이수한교과목의코드와점수를파일로부터입력 학생개인별총점, 평균계산 교과목별이수학생수, 총점및평균을계산 결과를파일에저장하는프로그램을작성 2 Makefile OBJS = score_main.o score_input.o score_calc.o score_print.o
<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >
10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절
Microsoft PowerPoint - chap01-C언어개요.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을
Frama-C/JESSIS 사용법 소개
Frama-C 프로그램검증시스템소개 박종현 @ POSTECH PL Frama-C? C 프로그램대상정적분석도구 플러그인구조 JESSIE Wp Aorai Frama-C 커널 2 ROSAEC 2011 동계워크샵 @ 통영 JESSIE? Frama-C 연역검증플러그인 프로그램분석 검증조건추출 증명 Hoare 논리에기초한프로그램검증도구 사용법 $ frama-c jessie