링크 ux 에서 스 레 드 구현

2553 단어 Linux핵심
링크 ux 에서 스 레 드 구현
  • 스 레 드 체 제 는 같은 프로그램 에서 메모리 주소 공간 을 공유 하여 실행 하 는 스 레 드 를 제공 합 니 다. 이 스 레 드 는 열 린 파일 과 다른 자원 도 공유 할 수 있 습 니 다.
  • Liux 커 널 의 측면 에서 볼 때 스 레 드 라 는 개념 이 없습니다. Liux 는 모든 스 레 드 를 프로 세 스 로 실현 합 니 다. 커 널 은 특별한 스 케 쥴 링 알고리즘 을 준비 하거나 특별한 데이터 구 조 를 정의 하여 스 레 드 를 표시 하지 않 고 스 레 드 를 다른 프로 세 스 와 일부 자원 을 공유 하 는 프로 세 스 로 만 생각 합 니 다. 모든 스 레 드 는 자신 만 의 task 를 가지 고 있 습 니 다.struct, 그래서 커 널 에서 스 레 드 는 일반적인 프로 세 스 처럼 보 입 니 다.

  • 스 레 드 생 성
  • 스 레 드 의 생 성 은 일반 프로 세 스 의 생 성 과 유사 합 니 다. 다만 클 라 이언 트 를 호출 할 때 전달 해 야 할 매개 변 수 는 다 릅 니 다. 이 매개 변 수 는 어떤 자원 을 공유 해 야 하 는 지 표시 합 니 다.다음은 fork, vfork 를 만 들 고 스 레 드 를 만 들 고 clone 을 호출 하 는 차이 입 니 다.
  • //fork
    clone(SIGCHLD, 0);
    
    //vfork
    clone(CLONE_CFORK | CLONE_VM | SIGCHLD);
    
    //    
    clone(CLONE_VM | CLONE_FS | CLONE_FILES | CLINE_SIGHAND, 0);
  • 다음은 clone 의 매개 변수 와 의미
  • 표지
    속뜻
    CLONE_FILES
    부자 프로 세 스 가 열 린 파일 공유
    CLONE_FS
    부자 프로 세 스 공유 파일 시스템 정보
    CLONE_IDLETASK
    PID 를 0 으로 설정 (idle 프로 세 스 만 사용)
    CLONE_NEWNS
    하위 프로 세 스 를 위 한 새 네 임 스페이스 만 들 기
    CLONE_PARENT
    하위 프로 세 스 와 부모 프로 세 스 가 같은 부모 프로 세 스 를 가지 고 있 는 지 지정 합 니 다.
    CLONE_PTRACE
    하위 프로 세 스 계속 디 버 깅
    CLONE_SETTID
    TID 를 사용자 공간 에 다시 쓰기
    CLONE_SETTLS
    하위 프로 세 스 를 위 한 새 TLS 만 들 기
    CLONE_SIGHAND
    부자 프로 세 스 공유 신호 처리 함수 및 차단 신호
    CLONE_THREAD
    부자 프로 세 스 가 같은 스 레 드 그룹 에 들 어 갑 니 다.
    CLONE_VFORK
    vfork 를 호출 하기 때문에 부모 프로 세 스 는 잠 을 자고 하위 프로 세 스 를 기다 리 며 깨 울 준 비 를 합 니 다.
    CLONE_UNTRACED
    추적 프로 세 스 가 하위 프로 세 스에 서 CLONE 을 강제 실행 하 는 것 을 방지 합 니 다.PTRACE
    CLONE_STOP
    TASK 로STOPPED 상태 시작 프로 세 스
    CLONE_SETTLS
    하위 프로 세 스 를 위 한 새 TLS (thread - local storage) 만 들 기
    CLONE_CHILD_CLEARTID
    하위 프로 세 스 의 TID 지우 기
    CLONE_CHILD_SETTID
    하위 프로 세 스 의 TID 설정
    CLONE_PARENT_SETTID
    부모 프로 세 스 의 TID 설정
    CLONE_VM
    부자 프로 세 스 공유 주소 공간
    커 널 스 레 드
  • 커 널 은 항상 배경 에서 조작 을 해 야 하 는데 이런 임 무 는 커 널 스 레 드 를 통 해 완성 할 수 있다
  • .
  • 커 널 스 레 드 는 커 널 공간 에서 독립 적 으로 실행 되 는 표준 프로 세 스 입 니 다. 일반 프로 세 스 와 의 차 이 는 커 널 스 레 드 에 독립 된 주소 공간 이 없다 는 것 입 니 다. (실제 주소 공간 을 가리 키 는 mm 지침 은 NULL 로 설정 되 어 있 습 니 다)
  • 커 널 스 레 드 는 사용자 공간 으로 전환 되 지 않 고 커 널 스 레 드 는 배 치 될 수 있 으 며 선점 할 수 있다.
  • 예 를 들 어 flush 와 ksofirqd 는 커 널 스 레 드 로 만 든 것 이다
  • 좋은 웹페이지 즐겨찾기