일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- BOF
- ioctl
- mvwin
- edge trigger
- wnourefresh
- epoll
- .net core 7
- LOB
- doupdate
- iptables
- architecture
- Compiler
- ncurses
- REDIS
- vtable
- packet flow
- packet filter
- level trigger
- 어셈블리어
- epoll_wait
- rfc5508
- wrefresh
- 풀이
- NAPT
- cbpf
- .nret core 배포
- Docker
- C언어
- DOCKER-USER
- 취약점
- Today
- Total
목록System programing (5)
Tuuna Computer Science
일단 위 메모리 구조를 보자 어셈블리로 코딩을 해보면 .section .data에 데이터공간을 선언하고 .section .text에 코드를 적은적이 있을 것이다. 그리고 완성된 소스파일을 어셈블하고 링크작업을 한 뒤 프로그램을 실행하면 메모리에 프로그램이 올라가게 될 것이다. 그럼 이 프로그램이 어떻게 메모리에 올라가느냐 일단 우리가 적은 코드 즉, .section .text섹션은 메모리의 0x08048000에 적재될 것이다. 그리고 .section .data영역도 그 다음에 선언된다. 그 다음은 .bss영역이 선언된다. 또한 그 위엔 LIFO식인 stack영역이 존재하고 stack 영역 위엔 프로그램의 인자가 적재된다. 즉 프로그램의 이름(NULL문자로 끝나는)과 프로그램실행시 넘기는 각종 인자가 메모..
System Call interface -> 시스템 콜 인터페이스는 user mode 프로세스인 응용 애플리케이션이 커널의 기능을 사용하게 해주는 것 커널 -> 하드웨어를 직접 제어하고 프로세스관리, 메모리관리, 파일시스템제어 등을 수행 ->사용자가 실행싴는 응용프로그램과 하드웨어 사이에서 조정자 역할을 함. 커널 버전 용어 -> 매이저 버전 : 엔진 커널의 획기적인 변화가 있을 경우 -> 마이너 버전 : 큰 변경 없이 버그 수정 및 기능적 추가 있을 경우 -> 패치 버전 : 기능은 변화없이 수정이 나타날 경우 패치버전을 씀 시스템 콜 vs 라이브러리 함수 Systme Call (커널 모드 + 하드웨어에 대한 모든 제어) -> 커널의 자원을 사용자가 사용할 수 있도록 만들어 놓은 함수 라이브러리 함수 (..
[ 공유 메모리 ] 프로세스에서 사용되는 메모리 영역은 해당 프로세스만이 사용할 수 있다. 즉, 자신만의 메모리 영역을 의미한다. -> 커널에 요청한 프로세스만이 접근할 수 있다. 하지만 여러개의 프로세스가 특정 메모리 영역을 사용했으면 하는 때가 있다. 이를 공유 메모리라고 한다. 공유 메모리는 IPC중에서 가장 빠른 수행속도를 기록한다. 이 때 한번에 하나의 프로세스만이 메모[리에 접근가능을 보장해야 한다. IPC : 프로세스간의 통신 [ 공유 메모리관련 함수 ] #include #include >sys/shm.h> int shmget (key_t key, int size, int shmflg) void* shmat (int shmid, const void* shmaddr, int shmflg) in..
[ 좀비 프로세서 ] :: 실행이 종료 되었지만 아직 삭제되지 않은 프로세스를 말한다. 보통 프로세스는 exit 시스템콜을 호출하여 프로세스를 종료 시킨다. 그리고 자신에 대한 모든 자원을 해제 시킨다. 하지만 프로세스의 exit status 상태와 PID는 여전히 남아서 유지( kernel :: task struct)에 유지하게 됨. 그 이유는 부모 프로세스는 자식 프로세스에 대한 종료상태등을 가져올 수 있어서 자신의 자식프로세가 어떤 상태로 작업을 마쳤는지에 대한 정보를 확인할 수 있기 때문이다! struct task_struct //task_struct 구조 { /* * offsets of these are hardcoded elsewhere - touch with care */ volatile l..
흔히 사용하는 프로그램은 하드 디스크에 위치한다. 이 하드디스크에 위치한 프로그램을 실행하면 메모리상에 복사된다. 즉, 프로그램이 복사된 이미지가 올라가는 것이다 -> 서로 완전히 독립적인 프로그램의 실행 가능 -> 여러개의 이미지가 가능 ( 멀티 프로세스, 멀티스레딩) 프로세스의 상태 동시에 프로그램을 실행하면 동시에 프로세스가 작동하는 것이라고 생각할 수 있지만 사실은 그것이 아니라 A라는 프로그램 실행하다가 중단되면 B 프로그램 C 프로그램으로와 같이 Switching한다. 이 Switching시간이 매우 짧기 때문에 프로그램들이 동시에 실행하는것으로 착각할 수 있다. 이를 -> 멀티 태스킹 운영체제라고 한다. (시분할) (time sharing) 프로세스는 4가지의 상태중 하나를 가지게 된다. r..