Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- 생활코딩
- hackctf
- XSS Game
- hackerrank
- PHP 웹페이지 만들기
- siss
- 파이썬
- c++
- 백준
- 드림핵
- SWEA
- CSS
- C언어
- 자료구조 복습
- 기계학습
- 숙명여자대학교 정보보안동아리
- BOJ
- lob
- 풀이
- HTML
- Python
- 숙명여자대학교 정보보안 동아리
- WarGame
- c
- 머신러닝
- Sookmyung Information Security Study
- Javascript
- BOJ Python
- The Loard of BOF
- 웹페이지 만들기
Archives
- Today
- Total
혜랑's STORY
[2020-2학기 리눅스 9주차] : 이론 본문
# 프로세스 이미지
- 프로세스 : 실행중인 프로그램(프로그램 자체가 프로세스는 아님)
- 텍스트(코드) : 프로세스가 실행하는 실행 코드를 저장하는 영역
- 데이터 : 프로그램 내에 선언된 전역변수(global variable) 및 정적 변수(static variable) 등을 위한 영역
- 힙 : 동적 메모리 할당을 위한 영역
- 스택 : 함수 호출을 구현하기 위한 실행시간 스택(runtime stack)을 위한 영역
- U-영역 : 열린 파일의 파일 디스크립터, 현재 작업 디렉터리 등과 같은 프로세스의 내부 정보
- size 명령어
$ size [실행파일] -> 실행파일의 각 영역의 크기를 알려준다. 실행파일을 지정하지 않으면 a,out를 대상으로 한다. |
# 프로세스 ID
- 쉘의 명령어 처리과정
- 각 프로세스는 프로세스를 구별하는 번호인 프로세스 ID를 갖는다.
#include <unistd.h> int getpid( ); -> 프로세스의 ID를 반환한다. int getppid( ); -> 부모 프로세스의 ID를 반환한다. |
# 프로세스 생성
- fork() 시스템 호출 : 부모 프로세스를 똑같이 복제하여 새로운 자식 프로세스를 생성 (자기복제)
#include <unistd.h> pid_t fork(void); -> 새로운 자식 프로세스를 생성한다. 자식 프로세스에게는 0을 반환하고 부모 프로세스에게는 자식 프로세스 ID를 반환한다. |
- 부모 자식 프로세스
- fork() 호출 후에 리턴값이 다르므로 이 리턴값을 이용하여 부모 프로세스와 자식 프로세스를 구변
- 부모, 자식 프로세스가 서로 다른 일을 하도록 할 수 있다.
- 프로세스 기다리기 : wait()
#include <sys/types.h> #include <sys/wait.h> pid_t wait(int *status); ->자식 프로세스 중의 하나가 종료할 때까지 기다린다. 자식 프로세스가 종료하면 종료코드가 *status에 저장된다. 종료한 자식 프로세스의 ID를 반환한다. |
# 프로그램 실행
- 프로그램 실행의 원리
- 프로그램 실행 : exec()
-> 프로세스가 exec를 호출하면, 그 프로세스 내의 프로그램은 완전히 새로운 프로그램으로 대치
#include <unistd.h> int execl(char* path, char* arg0, char* arg1, ... , char* argn,NULL) int execv(char* path, char* argv[ ]) int execlp(char* file, char* arg0, char* arg1, ... , char* argn,NULL) int execvp(char* file, char* argv[ ]) -> 호출한 프로세스의 코드, 데이터, 힙, 스택 등을 path가 나타내는 새로운 프로그램으로 대치한 후 새 프로그램을 실행한다. 성공한 exec( ) 호출은 리턴하지 않으며 실패하면 -1을 리턴한다. |
# 프로그램 실행 과정
- 명령줄 인수/환경 변수
int main(int argc, char *argv[]); -> argc : 명령줄 인수의 수, argv[] : 명령줄 인수 리스트를 나타내는 포인터 배열 |
# 시스템부팅과 프로세스
- 시스템 부팅 : 시스템 부팅은 fork/exec 시스템 호출을 통해 이루어진다.
- swapper(스케줄러 프로세스) : 커널 내부에서 만들어진 프로세스로 프로세스 스케줄링을 한다.
- init(초기화 프로세스) : /etc/inittab 파일에 기술된 대로 시스템을 초기화
- 서비스 데몬 프로세스 : 서비스들을 위한 데몬 프로세스들이 생성된다.
- getty 프로세스 : 로그인 프롬프트를 내고 키보드 입력을 감지한다.
- login 프로세스 : 사용자의 로그인 아이디 및 패스워드를 검사
- shell 프로세스 : 시작 파일을 실행한 후에 쉘 프롬프트를 내고 사용자로부터 명령어를 기다린다.
- 프로세스 트리 출력
$ pstree -> 실행중인 프로세스들의 부모, 자식 관계를 트리 형태로 출력한다. |
'2020 SISS 21기 활동 > 2학기 리눅스' 카테고리의 다른 글
[2020-2학기 리눅스 8주차] : 실습 (0) | 2020.11.22 |
---|---|
[2020-2학기 리눅스 8주차] : 이론 (0) | 2020.11.22 |
[2020-2학기 리눅스 7주차] : 실습 (0) | 2020.11.15 |
[2020-2학기 리눅스 7주차] : 이론 (0) | 2020.11.14 |
[2020-2학기 리눅스 6주차] : 이론 (0) | 2020.11.07 |