์ ๋์ค์ ๊ตฌ์กฐ
1. ์ปค๋ (kernel) : ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํ๋ ๋ถ๋ถ
์์ ์๋ฏธ์ ์ด์์ฒด์ ๋ผ๊ณ ๋ ํจ.
2. ์์คํ ํธ์ถ(system call) : ์์ฉํ๋ก๊ทธ๋จ์์ ์ด์์ฒด์ ์๊ฒ ์ด๋ ํ ๊ธฐ๋ฅ์ ์ํํด ๋ฌ๋ผ๋ ํ๋์ ์๋จ
์์ฉ ํ๋ก๊ทธ๋จ์ด ์ปค๋์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋๋ก ํ๋ค.
3. ์ (shell) : ์ปค๋๊ณผ ์ฌ์ฉ์ ๊ฐ์ ๋ค๋ฆฌ์ญํ
๋ช ๋ น์ ๋ฐ์ ํด์ํ๊ณ , ํ๋ก๊ทธ๋จ์ ์คํ์ํจ๋ค.
์์ ์ข ๋ฅ
1.Bourne shell : ์ต์ด์ ์ ธ, ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์ด๋ค.
2. Bourne-again shell : ๋ฆฌ๋ ์ค์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ์๋ก C์๊ณผ ์ฝ ์์ ์ฅ์ ์ ๊ฒฐํฉํ์ฌ ์์ฑ๋์๋ค.
3. C shell : C์ธ์ด ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก๋ค.
4. Korn shell : ๋ณธ ์์ ํ์ฅํ ์๋ก ๋ณธ ์์ ๋ช ๋ น์ด๋ฅผ ๋ชจ๋ ์ธ์ํ๋ฉฐ ์ ๋์ค์์ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉ๋๋ ์์ด๋ค.
5. TENEX C shell : C shell์ ๊ธฐ๋ฅ์ ๊ฐํํ ์์ด๋ค.
ํ์ผ ๋ฐ ๋๋ ํ ๋ฆฌ
1. ํ์ผ ์์คํ
๋ฐ์ดํฐ๋ฅผ ์ค์ ๋ก ์ ์ฅํ๋ ํ์ผ๊ณผ ์ด๋ฅผ ๊ณ์ธต์ ์ผ๋ก ์ฐ๊ฒฐํ๋ ๋๋ ํฐ๋ฆฌ๋ก ๊ตฌ์ฑ๋๋ค.
2. ํ์ผ ์ด๋ฆ
๋๋ ํ ๋ฆฌ์ ์๋ ์ด๋ฆ
‘/’๋ ๊ฒฝ๋ก์ด๋ฆ์ ํ์ฑํ๋ ํ์ผ์ด๋ฆ์ ๊ตฌ๋ถํ๋ค.
์ด๋ฆ์ ๋ฌธ์(a-z, A-Z), ์ซ์(0-9), ๋ง์นจํ(.), ๋์(-), ๋ฐ์ค(_)๋ก ๊ตฌ์ฑ๋๋ค.
3. Path name
‘/’๋ก ๊ฒฝ๋ก๋ช ์์ ์ด๋ฆ์ ๊ตฌ๋ถํ๋ค
‘/’๋ก ์์ํ๋ ๊ฒฝ๋ก๋ฅผ ์ ๋ ๊ฒฝ๋ก ์ด๋ฆ, ์๋๋ฉด ์๋ ๊ฒฝ๋ก์ด๋ฆ ์ด๋ผ ํ๋ค.
โ
๋๋ ํ ๋ฆฌ ๋ด์ ๋ชจ๋ ํ์ผ ๋ฆฌ์คํธ
ls ๋ช ๋ น์ด : ํ์ฌ ๋๋ ํ ๋ฆฌ์ ํ์ผ์ ๋ํ ๋ฆฌ์คํธ๋ฅผ ๋ณด์ฌ์ค๋ค.
โ #include “apue.h”
- ๋ค์ด๋ฐ์์ ์ฌ์ฉํ๋ค.
- ์ฑ ์ ๋ฑ์ฅํ๋ ๊ฑฐ์ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ ํฌํจ๋๋ค.
โก#include <dirent.h>
- ํ์ผ ์์คํ ์ ๋๋ ํฐ๋ฆฌ๋ฅผ ๋ํ๋ด๊ธฐ ์ํด ์ด๋ค.
โขint main(int argc, char *argv[])
- ๋ฉ์ธํจ์ ๋ด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ ๋งค๊ฐ๋ณ์๋ค์ด๋ค.
int argc : arguments count๋ก ํจ์์ ์ ๋ฌ๋ ์ ๋ณด์ ๊ฐ์์ด๋ค.
char * argv[] : arguments vector์ด๋ฉฐ, ๋ฉ์ธํจ์์ ์ ๋ฌ๋๋ ์ค์ง์ ์ธ ์ ๋ณด๋ก, ๋ฌธ์์ด์ ๋ฐฐ์ด์ ์๋ฏธํ๋ค.
argc๋ 4๊ฐ
โฃDIR *dp;
DIR : ๋๋ ํ ๋ฆฌ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ์๋ฃํ
โคstruct dirent *dirp;
dirent๋ผ๋ ๊ตฌ์กฐ์ฒด๋ช ์ ๊ฐ์ง ๊ตฌ์กฐ์ฒด ๋ณ์ ์ ์ธ
โฅif(argc !=2) : 2์ธ ์ด์
cmd์ C:\test ํ๋ผ๋ฏธํฐ๋ฅผ ์ ๋ ฅ ํฉ๋๋ค ๋ผ๊ณ ์ ๋ ฅ์ int argc๋ 4์ด๋ค.
๋ฐ๋ผ์ 2๋ผ๋ ์ซ์์ ์๋ฏธ๋ ์ ๋ ฅ ํ๋ผ๋ฏธํฐ๊ฐ 1๊ฐ๋ผ๋ ์๋ฏธ์ด๋ค
โฆerr_quit(“usage : ls directory_name”) : ์๋ฌ์ ๋ํ ์ค๋ช ์ ์ถ๋ ฅํ ๋ ์ฌ์ฉํ๋ ํจ์
โงif((dp=opendir(argv[1]))==NULL)
opendir() : ํด๋น ๋๋ ํ ๋ฆฌ๋ฅผ ์ด๊ณ ์ฒซ๋ฒ์งธ ์์์ ์์น๋ฅผ ๋ฆฌํดํ๋ ํจ์
โจerr_sys(“can’t open %s”,argc[1]);
err_sys : ํ์ค ์๋ฌ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ ํจ์
โฉwhile((dirp = readdir(dp) != NULL)
readdir() : ๋๋ ํฐ๋ฆฌ ๋ด์ ์ ๋ณด๋ฅผ ๊ตฌํ๋ ํจ์
โชclosedir(dp) : ๋๋ ํ ๋ฆฌ ๋ซ๊ธฐ
exit(0) : ์ ์์ข ๋ฃํ๋ค.
< ์คํ๊ฒฐ๊ณผ >
*์ ์ฝ๋๋ฅผ ์คํํ ๊ฒฐ๊ณผ
*ls –a ๋ช ๋ น์ด๋ฅผ ์คํํ ๊ฒฐ๊ณผ
๋๋ ํฐ๋ฆฌ
๋๋ ํฐ๋ฆฌ (Directory) :
ํ์ผ ๋ถ๋ฅ๋ฅผ ์ํด ๋ถ์ด๋ ์ด๋ฆ๊ณต๊ฐ
ํ์ผ์ ๊ตฌ์กฐ๋ฅผ ์๋ฏธํ๋ฉฐ ํด๋์ ์ ์ฌํ๋ค.
์์ ๋๋ ํฐ๋ฆฌ (Working directory) :
๋ชจ๋ ํ๋ก์ธ์ค์ ์กด์ฌํ๋ค.
ํ์ฌ ์์น์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์๋ฏธํ๋ค.
ํ ๋๋ ํฐ๋ฆฌ (Home directory) :
์ฌ์ฉ์์๊ฒ ํ ๋น๋ ์ฌ์ฉ์ ๊ฐ์ธ์ ๋ํ ๊ธฐ๋ณธ ๋๋ ํฐ๋ฆฌ ์์ญ
๊ณ์ ์ ๊ฐ์ง ์ฌ์ฉ์๊ฐ ์ต์ด ์ ์ ์ ๋ค์ด๊ฐ๊ฒ ๋๋ ์ฌ์ฉ์ ๋๋ ํฐ๋ฆฌ
ํ์ค ์ ๋ ฅ์ ํ์ค ์ถ๋ ฅ์ ๋ณต์ฌ
โ #define BUFFSIZE 4096 :
BUFFSIZE๋ฅผ 4096์ผ๋ก ์ค์ ํ๋ ์ ์ฒ๋ฆฌ๊ธฐ
โกwhile((n=read(STDIN_FILENO, buf, BUFFSIZE))>0) :
read() : ํ์ผ ์ฝ๊ธฐ ํจ์
๋ฆฌํด ๊ฐ : ์ฑ๊ณต : ์์ ํ ๋ฐ์ดํธ ์
์คํจ : -1
โขif (write (STDOUT_FILENO, buf, n) != n)
write() : ํ์ผ ์ฐ๊ธฐ ํจ์
๋ฆฌํด ๊ฐ : ์ฑ๊ณต : ์ ๋ฌํ ๋ฐ์ดํธ ์
์คํจ : -1
<์คํ๊ฒฐ๊ณผ>
Standard I/O
Standard I/O๋ฅผ ์ฌ์ฉํ๋ฉด ์ต์ ์ ๋ฒํผ ํฌ๊ธฐ๋ฅผ ์ ํํ ํ์๊ฐ ์๋ค.
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ํ์ค I/O์ ๊ธฐ๋ฅ์ printf์ด๋ฉฐ, ์ด๋ฅผ ํธ์ถํ๋ ํ๋ก๊ทธ๋จ์๋ ํญ์ <stdio.h>๊ฐ ํฌํจ๋๋ค.
ํ์ค I/O๋ฅผ ์ฌ์ฉํ์ฌ ํ์ค ์ถ๋ ฅ์ ํ์ค ์ ๋ ฅ์ ๋ณต์ฌ
โ while (( c = getc(stdin)) != EOF) :
getc(stdin) : = ( getchar() )
stdin์์ ํ๋ฌธ์๋ฅผ ๊ฐ์ ธ์จ๋ค
EOF : End Of File
getchar()์ด ํ์ผ์ ๋์ ๋๋ฌํ์๋ ๋ฐํ
โกif(putc (c,stdout)) == EOF) :
putc () : ์คํธ๋ฆผ์ ๋ฌธ์๋ฅผ ์ด๋ค.
โขerr_sys (“output error”); : ์๋ฌ๋ฉ์์ง ์ถ๋ ฅ
โฃif( ferror(stdin)) : ์ค๋ฅ๊ฐ ์๊ธฐ์ง ์์์ผ๋ฉด 0 ๋ฆฌํด
โคerr_sys (“input error”); : ์๋ฌ๋ฉ์์ง ์ถ๋ ฅ
โฅexit(); : ์ ์์ข ๋ฃ
<์คํ ๊ฒฐ๊ณผ>
๋ฒํผ๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ดํฐ ์์ค์ ์ํ์ด ์ ๋ค.
ํ๋ก๊ทธ๋จ๊ณผ ํ๋ก์ธ์ค
ํ๋ก๊ทธ๋จ (Program)
-๋๋ ํฐ๋ฆฌ์ ๋์คํฌ์ ์์ฃผํ๋ ์คํ ํ์ผ์ด๋ค.
-๋ฉ๋ชจ๋ฆฌ์ ์ฝํ์ง๊ณ ์ปค๋์ ์ํด ์คํ๋๋ค.
ํ๋ก์ธ์ค ๋ฐ ํ๋ก์ธ์ค ID (Processes and Process ID)
-ํ๋ก๊ทธ๋จ์ ์คํ ์ธ์คํด์ค๋ฅผ ํ๋ก์ธ์ค๋ผ๊ณ ํ๋ค.
-UNIX ์์คํ ์ ๋ชจ๋ ํ๋ก์ธ์ค์ ํ๋ก์ธ์ค ID๋ผ๋ ๊ณ ์ ํ ์ซ์ ์๋ณ์๊ฐ ์๋ค.
-ํ๋ก์ธ์ค ID๋ ํญ์ ์์๊ฐ ์๋ ์ ์์ด๋ค.
ํ๋ก์ธ์ค ID ์ถ๋ ฅ
getpid() : -์์ ์ ํ๋ก์ธ์ค ID๋ฅผ ๋ฐํํจ
-pid_t ๋ฐ์ดํฐ ์ ํ์ ๋ฐํํ๋ค.
pid_t : -ํ๋ก์ธ์ค ๋ฒํธ๋ฅผ ์ ์ฅํ๋ ํ์
<์คํ๊ฒฐ๊ณผ>
ํ์ค ์ ๋ ฅ์์ ๋ช ๋ น์ ์ฝ๊ณ ์คํ
โ #include <sys/wait.h> :
์๋์ waitpid()๋ฅผ ์ฐ๊ธฐ ์ํด ์จ์ค๋ค
โกpid_t pid; :
pid_t : ํ๋ก์ธ์ค ๋ฒํธ๋ฅผ ์ ์ฅํ๋ ํ์
โขwhile( fgets (buf, MAXLINE, stdin) != NULL) :
fgets : ์คํธ๋ฆผ์์ ๋ฌธ์์ด์ ๋ฐ๋๋ค
์ฑ๊ณต : buf๊ฐ์ ๋ฆฌํด
์คํจ : null ๋ฆฌํด
โฃ if( buf [strlen(buf) - 1] == ‘\n’ :
strlen() : ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๋ฐํํ๋ค.
โคif( ( pid = fork() ) < 0) :
fork() : ํ๋ก์ธ์ค ์์ฑ ํจ์
์ฑ๊ณต : ํ๋ก์ธ์ค๊ฐ 2๊ฐ๊ฐ ๋จ(๋ถ๋ชจ,์์)
์คํจ : -1 ๋ฆฌํด
โฅexeclp(buf, buf, (char *) 0 );
execlp() : ์์คํ ํธ์ถ ํจ์ / ์ฝ์ ๋ช ๋ น ์คํ
โฆexit(127); : command not found
โงif ( ( pid = waitpid(pid, &status, 0) ) <0
waitpid() : ์์ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ํจ์
์ฑ๊ณต : ํ๋ก์ธ์ค ID ๋ฐํ
์คํจ : -1
<์คํ๊ฒฐ๊ณผ>
์ค๋ ๋์ ์ค๋ฅ์ฒ๋ฆฌ
์ค๋ ๋ :
- ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ํ๋ฆ์ ๋จ์
-ํ ํ๋ก๊ทธ๋จ์ ํ๋์ ์ค๋ ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
-๋ฉํฐ ์ค๋ ๋๋ก ๋ณ๋ ฌ์ฒ๋ฆฌ๋ฅผ ์ด์ฉํ ์ ์๋ค.
-์ค๋ ๋๋ ID๋ก ์๋ณ์ด ๋๋ค. (์ค๋ ๋๋ฅผ ์กฐ์ํ ๋ ์๋ณํ๊ธฐ ์ํด ์ฌ์ฉ)
์ค๋ฅ์ฒ๋ฆฌ :
- ์ค๋ฅ ๋ฐ์์ ๋ณดํต ์์๊ฐ์ด ๋ฐํ๋๋ค.
-์ผ๋ถ ํจ์๋ null ํฌ์ธํฐ๋ฅผ ๋ฐํํ์ฌ ์ค๋ฅ๋ฅผ ๋ํ๋ธ๋ค.
-<errno.h>๋ error number๋ก ์ ์ ๋ฉ๋ชจ๋ฆฌ ์์น์ ์ ์ฅ๋ ์ค๋ฅ์ฝ๋๋ฅผ ํตํด ์ค๋ฅ ์ํ๋ฅผ ๋ณด๊ณ ๋ฐ ๊ฒ์ํ๊ธฐ ์ํ ๋งคํฌ๋ก๋ฅผ ์ ์ํ๋ค.
-ํจ์์ ๋ฐํ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ์์ ๋ํ๋ด๋ ๊ฒฝ์ฐ์๋ง ๊ฐ์ ๊ฒ์ฌํ๋ค.
-errno์ ๊ฐ์ ์ด๋ค ํจ์์๋ 0์ผ๋ก ์ค์ ๋์ง ์๋๋ค.
-์น๋ช ์ ์๋ฌ : ๋ณต๊ตฌ์์ ์ด ์๋ค. ์คํ์ด ์ค์ง๋๋ค.
-์น๋ช ์ ์ด์ง ์์ ์๋ฌ : ์ฝ๋๋ก ์์ ์ด ๊ฐ๋ฅํ๋ค. ์ผ์์ ์ด๋ค.
์ค๋ฅ ๋ฉ์์ง ๋ฌธ์์ด์ธ errnum์ ์ค๋ฅ ๋ฉ์์ง ๋ฌธ์์ด๋ก ๋งคํํ๊ณ ๋ฌธ์์ด์ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค.
์ค๋ฅ ํจ์๋ ํ์ฌ ์ค๋ฅ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ์ค ์ค๋ฅ์ ๋ํ ์ค๋ฅ ๋ฉ์์ง๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ค.
msg๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด์ ์ถ๋ ฅํ๊ณ ์ฝ๋ก ๊ณผ ๊ณต๋ฐฑ ๋ค์ ์ค๋ฅ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ ๋ค ์๋ก์ด ์ค์ ์ถ๋ ฅํ๋ค.
strerror ๋ฐ perror ์ฆ๋ช
โ fprintf( stderr, “ EACCES : %s \n” , strerror(EACCES));
fprintf() : ๋ฐ์ดํฐ๋ฅผ ํ์์ ๋ง์ถ์ด ์คํธ๋ฆผ์ ์ด๋ค.
strerror() : ์ค๋ฅ๋ฉ์์ง ๋ฌธ์์ด์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ ์ป์ด์จ๋ค.
๋ฆฌํด๊ฐ : ์ค๋ฅ๋ฒํธ์ ํด๋นํ๋ ์ค๋ฅ ๋ฌธ์์ด์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
โกperror ( argv [0]); : perror() : ์ค๋ฅ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๋ค.
<์คํ๊ฒฐ๊ณผ>
์ฌ์ฉ์ ์๋ณ
โ User ID : - ์๋ณํ๋ ์ซ์ ๊ฐ์ด๋ค.
- ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ID๊ฐ 0์ด๋ฉด ๋ฃจํธ, ์ํผ์ ์ ์ด๋ค.
โกGroup ID : - ์ํธํ์ผ ๋ด์ ๋์ผํ ID๋ฅผ ์ง์ ํ๋ ์ฌ๋ฌ ํญ๋ชฉ์ด ํฌํจ๋์ด ์๋ค
- ๋ชจ๋ ํ์ผ์ ์ฌ์ฉ์ ID์ ๊ทธ๋ฃนID๋ฅผ ๋ชจ๋ ์ ์ฅํ๋ค.
โ printf(“uid = %d, gid = %d\n”, getuid(), getgid());
getuid() : ์ฌ์ฉ์ ์์ด๋๋ฅผ ์ป์ด์จ๋ค.
getgid() : ๊ทธ๋ฃน ์์ด๋๋ฅผ ์ป์ด์จ๋ค.
<์คํ๊ฒฐ๊ณผ>
๋ณด์กฐ๊ทธ๋ฃน ID
โ ์ํธํ์ผ์ ์ง์ ๋ ๊ทธ๋ฃนID ์ธ์๋ ๋๋ถ๋ถ์ UNIX ์์คํ ๋ฒ์ ์ ์ฌ์ฉ์๊ฐ
๋ค๋ฅธ ๊ทธ๋ฃน์ ์ํ๋๋ก ํ์ฉํ๋ค
โก๋ก๊ทธ์ธ์ /etc/group ํ์ผ์ ์ฝ๊ณ ์ฌ์ฉ์๋ฅผ ๊ตฌ์ฑ์์ผ๋ก ๋์ดํ๋ ์ฒ์ 16๊ฐ์ ํญ๋ชฉ์ ์ฐพ์ ๊ฐ์ ธ์จ๋ค.
signal
Signal : ํ๋ก์ธ์ค๊ฐ ์ผ๋ถ ์ํ๊ฐ ๋ฐ์ํ์์ ์๋ฆฌ๋ ๋ฐ ์ฌ์ฉ๋๋ ๊ธฐ๋ฒ์ด๋ค.
ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด
์๊ทธ๋์ ๋ฌด์ํ๋ค.
๊ธฐ๋ณธ ์์ ์ ์ํํ๋ค.
์๊ทธ๋์ด ๋ฐ์ํ ๋ ํธ์ถ๋๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค. ์ด ๊ธฐ๋ฅ์ผ๋ก ์ํ๋ ๋๋ก ์ฒ๋ฆฌ ๊ฐ๋ฅํ๋ค.
์ธํฐ๋ฝํธ ํค์ ์ข ๋ฃ ํค๋ ํ์ฌ ์คํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ์ค๋จํ๋๋ฐ ์ฌ์ฉ๋๋ค.
kill ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์๊ทธ๋์ ๋ณด๋ผ ์ ์๋ค.
ํ์ค ์ ๋ ฅ์์ ๋ช ๋ น ์ฝ๊ธฐ ๋ฐ ์คํ
โ if(signal(SIGINT , sig_int) == SIG_ERR)
โกsignal() : ์ธํฐ๋ฝํธ ์ ํธ๋ฅผ ์ฒ๋ฆฌํ๋ค.
โขSIG_ERR :
์ด ๋ฆฌํด ๊ฐ์ signal()์ ๋ํ ํธ์ถ์์์ ์ค๋ฅ๋ฅผ ํ์ํ๋ค.
์ฑ๊ณต ์ sig_int์ ๊ฐ์ ๋ฆฌํด ํ๋ค.
<์คํ๊ฒฐ๊ณผ>
์๊ฐ ๊ฐ(Time Values)
1.Calendar time : 1970๋ 1์ 1์ผ ์ดํ ์๊ฐ์ ์นด์ดํธ ํ๋ค.
2. Process time : CPU ์๊ฐ์ด๋ผ๊ณ ๋ ํ๋ฉฐ ํ๋ก์ธ์ค์์ ์ฌ์ฉํ๋ ์ค์ ํ๋ก์ธ์ ๋ฆฌ์์ค๋ฅผ ์ธก์ ํ๋ค.
3. wall clock time : ํ๋ก์ธ์ค๊ฐ ์คํ๋๋๋ฐ ๊ฑธ๋ฆฌ๋ ์๊ฐ์ ์.
4. user CPU time : ์ฌ์ฉ์ ๋ช ๋ น์ผ๋ก ์ธํ CPU ์๊ฐ์ด๋ค.
5. system CPU time : ํ๋ก์ธ์ค๋ฅผ ๋์ ํ์ฌ ์คํ๋ ๋ ์ปค๋์ ๊ท์๋๋ CPU ์๊ฐ์ด๋ค.
malloc ๊ธฐ๋ฅ๊ณผ sbrk ์์คํ ํธ์ถ์ ๋ถ๋ฆฌ
malloc(): ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ ๋
์ ์ฉํ๊ฒ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
sbrk(): ํ์์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ๋ ์ญํ ์ ํ๋ค.
ํจ์ ๋ด์ ์ธ์ ๊ฐ์ ํด๋นํ๋ ๋งํผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ฅํ๋ค.
์์คํ ํธ์ถ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ ์ฐจ์ด
๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ฅผ ์ฌ์ฉ :
ํจ์ ๋ด์ ์ฌ์ฉ๋ ์์คํ ์ฝ์ ์ฌ์ฉํ๋ค.
์์ฉ ํ๋ก๊ทธ๋จ ๋ด์์ ๋ฐ๋ก ์์คํ ์ฝ์ ์ฌ์ฉ :
๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ฅผ ๊ฑฐ์น์ง ์๊ณ ์ปค๋์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๋ค.
ํผ๋๋ฐฑ ์ ๋ฆฌ
์ปค๋์ด ์ ๋ฉ๋ชจ๋ฆฌ์ ํญ์ ์์ฃผํด์ผ ํ๋๊ฐ?
๋จผ์ ์ปค๋์ด ์๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋จ๋ค์ ๋ฉ๋ชจ๋ฆฌ์ ์์ด๋ ๋๊ณ ์์ด๋ ๋๋ค. ํ๋ก๊ทธ๋จ์ด ๋์ํ๊ธฐ ์ํด์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ ๋์ด์ผ ํ๋๋ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฉ๋์ ์ ํ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌ ํ๋ก๊ทธ๋จ์ ๋์์ ํ ๋นํ๊ธฐ์๋ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๋๊ฐ ๋ง๋ค. ์ปค๋์ด ์๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉ์๊ฐ ์์ฒญํ ๋์๋ง ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ฉ๋๋ค. ์ปค๋์ ์ด๋ฐ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ๋ํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ๊ด๋ฆฌํด์ผ ํ๋ค. ๋ํ ์์ฉํ๋ก๊ทธ๋จ์ด ํ๋์จ์ด์ ์ ๊ทผํ๋ ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค. ๋ฐ๋ผ์ ์ปค๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์์ผ๋ฉด ์ด์์ฒด์ ๊ฐ ๋์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ์ ์์ฃผํด์ผ ํ๋ค.
2. ์ ๋/์๋ ๊ฒฝ๋ก์ ๊ดํ ๋ช ๋ น์ด
์ฌ์ง๊ณผ ๊ฐ์ด A ๋๋ ํ ๋ฆฌ ๋ด์ B, C, D๊ฐ ์ฐจ๋ก๋ก ์๋ ์ํ์ด๋ค.
์ ๋๊ฒฝ๋ก ( b๋๋ ํ ๋ฆฌ์์ d ๋๋ ํ ๋ฆฌ๋ก ์ด๋ ํ ๋ค์ b๋๋ ํ ๋ฆฌ๋ก ์ด๋)
→ ํ์ฌ ์์น์ ๊ด๊ณ์์ด ์ด๋ํ๊ณ ์ถ์ ๊ฒฝ๋ก๋ฅผ ์ ์ด์ฃผ๋ฉด ๋๋ค.
2. ์๋๊ฒฝ๋ก ( b๋๋ ํ ๋ฆฌ์์ d ๋๋ ํ ๋ฆฌ๋ก ์ด๋ ํ ๋ค์ b๋๋ ํ ๋ฆฌ๋ก ์ด๋)
→ ํ์ฌ ์์น๋ฅผ ๊ณ ๋ คํ์ฌ ์ ์ฒด ๊ฒฝ๋ก๊ฐ ์๋ ์ผ๋ถ๊ฒฝ๋ก๋ง ์ ์ด์ค๋ค.
cd ./c/d ๋ b์์ d๋ก ์ด๋ํ๋ ๊ฒ์ด๊ณ cd ../../์ d์์ b๋ก ์ด๋ํ๋ ๊ฒ์ด๋ค.
3. readdir()๋ ๋๋ ํฐ๋ฆฌ ๋ด์ ์ ๋ณด๋ฅผ ๊ตฌํ๋ ํจ์์ธ๋ฐ ๊ทธ ์ ๋ณด๋ ์ด๋ค ์ ๋ณด์ธ๊ฐ?
๋จผ์ , struct dirent์ด๋ค.
inode์ ๋ฒํธ, ๋๋ ํ ๋ฆฌ ๋ด์์์ ์คํ์ , ์ํธ๋ฆฌ์ ๊ธธ์ด, ํ์ผ์ด๋ ๋๋ ํ ๋ฆฌ ์ด๋ฆ์ ๋ด๊ณ ์๋ค.
readdir(dp)๋ dp๋ผ๋ ์ด๋ฆ์ ๋๋ ํฐ๋ฆฌ ๊ตฌ์กฐ์ฒด์ ํฌ์ธํฐ๋ฅผ ๋ฐํํ๋ค.
๋ ์ด์ ์ฝ์ ์ ๋ณด๊ฐ ์๊ฑฐ๋ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด NULL์ ๋ฐํํ๋ค.
์ฒ์ readdir()์ ํธ์ถํ๋ฉด ์ฒซ ๋ฒ์งธ ํ์ผ, ๋ ํธ์ถํ๋ฉด ๋ ๋ฒ์งธ ํ์ผ ๋ ํธ์ถํ๋ฉด ์ธ ๋ฒ์งธ ํ์ผ ์์๋ก ์ ๋ณด๋ฅผ ๋ฐํํ๋ค.
๋ฐ๋ผ์ ๋ ์ด์ ์ฝ์ ์ ๋ณด๊ฐ ์์ ๋๊น์ง ๋๋ ํ ๋ฆฌ์ ์ด๋ฆ์ ์ถ๋ ฅํ๋ ์ฝ๋์ด๋ค.
4. getpid()๋ฅผ long์ผ๋ก ํ๋ณํ ํด์ค ์ด์ .
getpid()๋ ๋ฐํ๊ฐ์ด pid_t ์ด๋ค.
long์ผ๋ก ํ๋ณํ ํด์ฃผ๋ ์ด์ ๋ ID๋ ์ซ์์ด๋ฏ๋ก ์ซ์๋ฅผ ์ถ๋ ฅํด์ผํ๊ธฐ ๋๋ฌธ์ด๋ค.
5. fork()
fork() : ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ํจ์
์ฑ๊ณต ์ ๋ฆฌํด๊ฐ์ด 2๊ฐ์ธ๋ฐ fork๋ฅผ ํธ์ถํ๋ ํ๋ก์ธ์ค๋ ๋ถ๋ชจํ๋ก์ธ์ค, ์๋กญ๊ฒ ์์ฑ๋๋ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค๊ฐ ๋๋ค.
๋ถ๋ชจํ๋ก์ธ์ค๋ ์๋ก์ด pid๊ฐ ๋ฐํ๋๊ณ , ์์ ํ๋ก์ธ์ค๋ 0์ด ๋ฐํ๋๋ค.
ํ๋ก์ธ์ค ์์ฑ ์คํจ ์ –1์ ๋ฆฌํดํ๋ค.
์ด ๋ถ๋ถ์์ if๋ฌธ ๋ด์์ pid < 0 ์ fork()๊ฐ ์คํจํ์ ๊ฒฝ์ฐ์ด๋ฏ๋ก –1์ด ๋ฆฌํด๋์๋ค.
else if ๋ฌธ์์ pid == 0 ์ ์๋กญ๊ฒ ์์ฑ๋์ด pid๊ฐ 0์ธ ์์ ํ๋ก์ธ์ค๋ฅผ ์๋ฏธํ๋ค.
6. EACCES
errno.EACCES
Permission denied – ์ฌ์ฉ ๊ถํ์ด ๊ฑฐ๋ถ๋์์ต๋๋ค.
errno.ENOENT
No such file or directory – ๊ทธ๋ฐ ํ์ผ์ด๋ ๋๋ ํฐ๋ฆฌ๊ฐ ์์ต๋๋ค
๊ทธ ์ธ์ errno.h์ ์ ์๋์ด ์๋ ๋ค๋ฅธ ์ค๋ฅ ๋ฉ์์ง ๋ฉํฌ๋ก๋ค์
https://docs.python.org/ko/3/library/errno.html
์์ ํ์ธ ๊ฐ๋ฅํ๋ค.
7. signal์ ์ด๋์์ ์ ํธ๋ฅผ ์ฃผ๊ณ ๋ฐ๋๊ฐ?
์ ํธ๋ ์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค์๊ฒ ์ ํธ๋ฅผ ์ค๋ค.
์ฐธ๊ณ ์๋ฃ : https://blog.naver.com/shw20319/20147713837
SIG_ERR
signal()์ ๋ํ ํธ์ถ์์์ ์ค๋ฅ๋ฅผ ํ์ํฉ๋๋ค.
8. STDIN_FILENO
ํ์ผ ๋์คํฌ๋ฆฝํฐ : ์์คํ ์ผ๋ก๋ถํฐ ํ ๋น ๋ฐ์ ํ์ผ์ ๋ํํ๋ 0์ด ์๋ ์ ์ ๊ฐ, ํ๋ก์ธ์ค์์ ์ด๋ฆฐ ํ์ผ์ ๋ชฉ๋ก์ ๊ด๋ฆฌํ๋ ํ ์ด๋ธ์ ์ธ๋ฑ์ค
<unistd.h>์์ ์ฐพ์๋ณผ ์ ์๋ค.
9. getc(stdin)
ํ์ค ์ ๋ ฅ ๋ฒํผ์์ ๋ฌธ์๋ฅผ ํ๋ ๊ฐ์ ธ์ค๋ ํจ์์ด๋ค.
stdin์ stdin ์คํธ๋ฆผ์์ ์ ๋ ฅ๊ฐ์ ๊ฐ์ ธ์จ๋ค๋ ์๋ฏธ์ด๋ค.
getc(stdin)๊ณผ getchar()๋ ๊ฐ์ ํจ์๋ก ๋ณผ ์ ์๋ค.
getc()๋ ์คํธ๋ฆผ์ ์ธ์๋ก ๋ฐ์ง๋ง getchar()๋ ์คํธ๋ฆผ ์ธ์๋ฅผ ๋ฐ์ง์๊ณ getchar() ์ด๋ ๊ฒ๋ง ์ฌ์ฉํ๋ค.
getchar()๋ getc()๋ฅผ ํ์ค์ ๋ ฅ ์คํธ๋ฆผ์ ์ฌ์ฉํ ๊ฒ๊ณผ ๋์ผํ๋ค.
10. ์์คํ ํธ์ถ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์
์์คํ ํธ์ถ : ์ปค๋์ ์์์ ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค์ด ๋์ ํจ์๋ค
์์คํ ํธ์ถ์ ์ปค๋์ด ๊ฑด๋ค์ฃผ๋ ์ ๋ณด๋ฅผ ์ฌ์ฉ์ ๋ชจ๋์ ํ๋ก๊ทธ๋จ์ ๋ฐ์ ์ค๋ ค๋ฉด ๋ฐ๋์ ์ฌ์ฉ์ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ผ ํ๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์ : ์ฌ์ฉ์๋ค์ด ๋ง์ด ์ฌ์ฉํ ๊ฒ ๊ฐ์ ๊ธฐ๋ฅ๋ค์ ๋ฏธ๋ฆฌ ํจ์๋ก ๋ง๋ค์ด ๋์ ๊ฒ.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ณ๋๋ก ํ ๋นํ์ง ์์๋ ๋๋ค.
printf()๋ scanf()๊ฐ์ ํจ์๊ฐ ์ฌ๊ธฐ์ ์ํ๋ค.
์ปค๋๋ชจ๋์ ์ฌ์ฉ์๋ชจ๋๋ก ์ํ๊ณต๊ฐ์ ๋๋๋ ์ด์ ๋ ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ ๋์์ ์คํํ ๋ ํ๋ก๊ทธ๋จ์ด ๋ค๋ฅธ ํ๋ก๊ทธ๋จ์ ๋ฐฉํดํ๊ฑฐ๋ ์ถฉ๋์ด ์ผ์ด๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๊ตฌ๋ถ์์ผ์ค๋ค.
์ปค๋๋ชจ๋ : ์ด์์ฒด์ ๊ฐ cpu์ ์ ์ด๊ถ์ ๊ฐ์ง๊ณ ์ด์์ฒด์ ์ฝ๋๋ฅผ ์คํํ๋ ๋ชจ๋๋ก ์ด ๋ชจ๋์์๋ ๋ชจ๋ ์ข ๋ฅ์ ๋ช ๋ น์ ๋ค ์คํ๊ฐ๋ฅํ๋ค.
์ฌ์ฉ์๋ชจ๋ : ์ผ๋ฐ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉฐ ์ ํ์ ์ธ ๋ช ๋ น๋ง์ด ๊ฐ๋ฅํ๋ค.
ํ๋ก์ธ์ค๋ ๋ ๋ชจ๋๋ค์ ์คํ๋๋ ๋์ ์์์ด ์ฎ๊ฒจ๊ฐ๋ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉฐ ์คํ๋๋ค.
์ฑ ์์๋ ์์คํ ํธ์ถ๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ ์๋ฅผ malloc()๊ณผ sbrk๋ก ์ค๋ช ํ์๋ค.
malloc() (๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์)๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ํจ์์ด๋ค. sbrk(์์คํ ์ฝ)์ ํจ์๋ฅผ ์ฒ๋ฆฌํ๋ ์ญํ ์ ํ๋ค.
์ปค๋์ ์์คํ ํธ์ถ์ธ sbrk๋ ํ๋ก์ธ์ค ๋์ ์ถ๊ฐ ๊ณต๊ฐ์ ํ ๋นํ๋ค. ์ด ์ฌ์ด์์ malloc๋ ์ฌ์ฉ์ ์์ค์์ ๊ณต๊ฐ์ ๊ด๋ฆฌํ๋ค.
'Computer Science > Operating System' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[OS] CPU ์ค์ผ์ค๋ง (0) | 2023.12.13 |
---|---|
[OS] ์ปดํจํฐ์ ๊ตฌ์กฐ์ ์ฑ๋ฅ ํฅ์ (0) | 2023.11.01 |
[OS] Code, Data, Heap, Stack (์ฝ๋, ๋ฐ์ดํฐ, ํ, ์คํ) (0) | 2023.02.15 |