과정에 관한 몇 가지 주의사항
과정
과정은 절차의 실질일 뿐이다.프로그램은 기계 언어 명령과 데이터를 포함하여 디스크에 저장하는 유사한 이미지입니다.명령 "ps"를 사용하여 기계의 프로세스를 검사할 수 있습니다.이것은 Ubuntu 20.04의 WSL에서 실행되는 "ps"명령의 예입니다.
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 17:23 ? 00:00:00 /init
root 5 1 0 17:23 tty1 00:00:00 /init
watson 6 5 0 17:23 tty1 00:00:00 -bash
watson 111 6 0 19:23 tty1 00:00:00 ps -ef
보시다시피 "ps"명령도 하나의 과정입니다.모든 linux 버전에는 프로세스 id가 1인 "init"프로세스가 있습니다.Init 프로세스는 기계에서 실행되는 첫 번째 프로세스입니다. 정확히 말하면 프로세스 0은 커널에서 실행됩니다.그래서 모든 프로세스는 init 프로세스에서 시작됩니다. 모든 프로세스의 부모 프로세스라고 합니다.
프로세스는 PID뿐만 아니라 PPID를 가지고 있으며 부모 프로세스 id를 나타냅니다. 처리된 프로세스는 트리 구조로 표시할 수 있습니다.이런 상황에서 구조는 다음과 같다.
WSL을 사용하기 때문에 inits 프로세스가 두 개 있습니다.WSL은 linux와 다른 자신의 초기화 프로세스를 사용합니다. WLS는 윈도우즈가 linux의 파일 시스템에 접근할 수 있도록 9p 서버에 서비스를 제공해야 합니다.이 작업은 같은 init 바이너리 파일에 있지만 다른 프로세스로 실행됩니다.이것이 바로 WSL을 사용할 때 초기화 프로세스가 있는 이유입니다.
메모리 아키텍처
이것은 가상 메모리와 실행 가능한 이미지에 대한 개요입니다.서로 다른 UNIX 시스템은 서로 다른 프로세스 레이아웃을 사용하지만, 대부분의 현대 시스템은 실행 및 링크 형식(ELF)이라는 형식을 따른다.
코어 공간
프로세스 구조
커널은 모든 프로세스의 프로세스 구조를 유지합니다.이 구조에는 커널 관리 프로세스에 필요한 정보가 포함되어 있습니다.그것에 포함된 정보집은 linux 버전이나 버전에 따라 다르지만, 대부분의 버전은 다음과 같은 정보를 포함한다.
・프로세스 id
・부모 프로세스 id (또는 부모 프로세스 구조를 가리키는 포인터)
・하위 프로세스 목록을 가리키는 포인터
・스케줄링된 프로세스 우선 순위, CPU 사용률 및 최종 우선 순위에 대한 통계
・프로세스 상태
・신호 정보(신호 대기, 신호 마스크 등)
・기계 상태
・타이머
사용자 구조
사용자 구조 유지 보수의 정보는 내부 핵 구조보다 훨씬 적다.Linux에는 메모리 매핑과 프로세스 제어 블록이 포함되어 있습니다.메모리 맵은 일반적으로 텍스트, 데이터, 창고 단계의 시작과 끝 주소, 그리고 나머지 주소 공간의 각종 기지와 극한 레지스터 등을 포함한다.프로세스 제어 블록에는 CPU 상태와 가상 메모리 상태가 포함됩니다.
코어 스택
모든 프로세스는 자신의 핵 창고를 가지고 있다.내부 핵 공간 중의 모든 함수는 정성스럽게 설계되었기 때문에 그것들은 비귀속이다. 왜냐하면 귀속 함수는 대량의 창고 공간을 사용했기 때문이다.스택의 최대 크기는 추적 기능 체인을 통해 확인할 수 있습니다.따라서 내부 핵 창고는 고정된 크기로 분배된다.
사용자 공간
텍스트 세그먼트
텍스트 세그먼트는 프로그램의 실행 가능한 코드입니다.이 세그먼트는 읽기 전용이며 처리된 모든 세그먼트와 공유됩니다.
스택 세그먼트
함수 반환 주소, 함수 매개 변수 등에 사용되는 창고 세그먼트 저장.만약 창고가 무더기의 꼭대기에 부딪히면 이상을 초래할 수 있다.
데이터 세그먼트
데이터 세그먼트는 초기화 데이터와 초기화되지 않은 데이터를 유지합니다.초기화 데이터의 시작 값과 이름은 기호표에서 나온다.초기화되지 않은 데이터는 값이 없기 때문에 데이터 세그먼트의 편이량만 있습니다.데이터 세그먼트는 현식 메모리 요청 (예를 들어 Brk () 시스템 호출) 을 통해 증가하거나 수축됩니다.malloc () 는 C에서 brk () 와 관련된 함수입니다.
ELF 유형
ELF에는 세 가지 유형이 있습니다.우리는 번역 과정을 통해 그것을 얻을 수 있다.
1- 객체 파일(*.o)
이것은 실행 가능한 파일을 만들기 위해 다른 대상 파일과 링크하는 데 사용되는 코드와 데이터를 저장하는 바이너리 파일입니다.이것은 실행 가능한 파일의 일부와 같아서 스스로 실행할 수 없습니다.
2 - 실행 가능
이것은 실행할 수 있는 바이너리 파일입니다.실행 프로그램에 필요한 모든 대상 파일을 링크하고 실행 가능한 파일을 생성합니다.*파일은 정적 라이브러리로 일부 대상 파일의 압축 파일입니다.프로그램이 정적 라이브러리를 필요로 할 때, 링크기는 컴파일할 때 링크합니다.실행 가능한 출력 파일의 이름을 정의하지 않으면, 이름은.out으로 어셈블리 출력을 나타냅니다.
3 - 객체 파일 공유(*.so)
이를 동적 링크 라이브러리라고 합니다.프로그램이 그것을 필요로 할 때, 프로그램이 실행할 때 연결됩니다.
Reference
이 문제에 관하여(과정에 관한 몇 가지 주의사항), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/watysom/some-notes-on-process-55j4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)