Τρίτη, 12 Νοεμβρίου 2013

2.1 - ΒΑΣΙΚΕΣ ΕΝΝΟΙΕΣ ΛΕΙΤΟΥΡΓΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ - ΔΙΕΡΓΑΣΙΕΣ. ΟΡΙΣΜΟΣ. ΔΙΑΦΟΡΑ ΔΙΕΡΓΑΣΙΑΣ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΟΣ.


ΟΡΙΣΜΟΣ
Διεργασία (process) είναι ένας όρος της πληροφορικής ο οποίος περιγράφει το στιγμιότυπο ενός προγράμματος που εκτελείται σε έναν υπολογιστή

ΔΙΑΦΟΡΑ ΔΙΕΡΓΑΣΙΑΣ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΟΣ
Σε αντιδιαστολή με την έννοια του προγράμματος, το οποίο είναι ένα στατικό σύνολο εντολών, μια διεργασία συνιστά την εκτέλεση αυτών των εντολών. 
Επομένως ένα πρόγραμμα γενικώς συσχετίζεται με περισσότερες από μία διεργασίες, μία για κάθε φορά που εκτελείται. 
Μια διεργασία αποτελείται από το ίδιο το πρόγραμμα και από κάποιες τιμές που περιέχονται στη μνήμη και στους καταχωρητές του επεξεργαστή, δηλαδή την κατάσταση του συστήματος, κάθε στιγμή που το πρόγραμμα εκτελείται. 
Τα σύγχρονα λειτουργικά συστήματα επιτρέπουν την ταυτόχρονη συνύπαρξη πολλαπλών διεργασιών στη μνήμη του υπολογιστή καθώς υποστηρίζουν πολυδιεργασία, μία μέθοδο υλοποίησης ταυτοχρονισμού με την οποία, είτε με κατάλληλη κατανομή του χρόνου του μοναδικού επεξεργαστή (ψευδοπαράλληλη εκτέλεση) είτε λόγω της ύπαρξης περισσοτέρων του ενός επεξεργαστών (παράλληλη εκτέλεση), είναι εφικτή η ταυτόχρονη εκτέλεση πολλαπλών διεργασιών.

Διεργασίες

Κάθε διεργασία φυλάσσεται στον πίνακα διεργασιών με βάση τα παρακάτω πεδία:
struct  proc {
        TAILQ_ENTRY(proc) p_procq;      /* run/sleep queue. */
        LIST_ENTRY(proc) p_list;        /* List of all processes. */

        /* substructures: */
        struct  pcred *p_cred;          /* Process owner's identity. */
        struct  filedesc *p_fd;         /* Ptr to open files structure. */
        struct  pstats *p_stats;        /* Accounting/statistics (PROC ONLY). */
        struct  plimit *p_limit;        /* Process limits. */
        struct  vm_object *p_upages_obj;/* Upages object */
        struct  sigacts *p_sigacts;     /* Signal actions, state (PROC ONLY). */


        int     p_flag;                 /* P_* flags. */
        char    p_stat;                 /* S* process status. */
        char    p_pad1[3];

        pid_t   p_pid;                  /* Process identifier. */
        LIST_ENTRY(proc) p_hash;        /* Hash chain. */
        LIST_ENTRY(proc) p_pglist;      /* List of processes in pgrp. */
        struct  proc *p_pptr;           /* Pointer to parent process. */
        LIST_ENTRY(proc) p_sibling;     /* List of sibling processes. */
        LIST_HEAD(, proc) p_children;   /* Pointer to list of children. */

        struct callout_handle p_ithandle; /*
                                              * Callout handle for scheduling
                                              * p_realtimer.
                                              */

        pid_t   p_oppid;         /* Save parent pid during ptrace. XXX */
        int     p_dupfd;         /* Sideways return value from fdopen. XXX */

        struct  vmspace *p_vmspace;     /* Address space. */

        /* scheduling */
        u_int   p_estcpu;        /* Time averaged value of p_cpticks. */
        int     p_cpticks;       /* Ticks of cpu time. */
        fixpt_t p_pctcpu;        /* %cpu for this process during p_swtime */
        void    *p_wchan;        /* Sleep address. */
        const char *p_wmesg;     /* Reason for sleep. */
        u_int   p_swtime;        /* Time swapped in or out. */
        u_int   p_slptime;       /* Time since last blocked. */

        struct  itimerval p_realtimer;  /* Alarm timer. */
        struct  timeval p_rtime;        /* Real time. */
        u_quad_t p_uticks;              /* Statclock hits in user mode. */
        u_quad_t p_sticks;              /* Statclock hits in system mode. */
        u_quad_t p_iticks;              /* Statclock hits processing intr. */
        struct  timeval *p_sleepend;    /* Wake time for nanosleep & friends */

        int     p_traceflag;            /* Kernel trace points. */
        struct  vnode *p_tracep;        /* Trace to vnode. */

        int     p_siglist;              /* Signals arrived but not delivered. */

        struct  vnode *p_textvp;        /* Vnode of executable. */

        char    p_lock;                 /* Process lock (prevent swap) count. */
        char    p_oncpu;                /* Which cpu we are on */
        char    p_lastcpu;              /* Last cpu we were on */
        char    p_pad2;                 /* alignment */

        short   p_locks;                /* DEBUG: lockmgr count of held locks */
        short   p_simple_locks;         /* DEBUG: count of held simple locks */
        register_t p_retval[2];         /* syscall aux returns */

        sigset_t p_sigmask;     /* Current signal mask. */
        sigset_t p_sigignore;   /* Signals being ignored. */
        sigset_t p_sigcatch;    /* Signals being caught by user. */

        u_char  p_priority;     /* Process priority. */
        u_char  p_usrpri;       /* User-priority based on p_cpu and p_nice. */
        char    p_nice;         /* Process "nice" value. */
        char    p_comm[MAXCOMLEN+1];

        struct  pgrp *p_pgrp;   /* Pointer to process group. */

        struct  sysentvec *p_sysent; /* System call dispatch information. */

        struct  rtprio p_rtprio;        /* Realtime priority. */

        struct  user *p_addr;   /* Kernel virtual addr of u-area (PROC ONLY). */
        struct  mdproc p_md;    /* Any machine-dependent fields. */

        u_short p_xstat;        /* Exit status for wait; also stop signal. */
        u_short p_acflag;       /* Accounting flags. */
        struct  rusage *p_ru;   /* Exit information. XXX */

        int     p_nthreads;     /* number of threads (only in leader) */
        void    *p_aioinfo;     /* ASYNC I/O info */
        int     p_wakeup;       /* thread id */
        struct proc *p_peers;   
        struct proc *p_leader;
};
Κάθε διεργασία μπορεί να βρίσκεται σε μια από τις παρακάτω καταστάσεις:
#define SIDL    1               /* Process being created by fork. */
#define SRUN    2               /* Currently runnable. */
#define SSLEEP  3               /* Sleeping on an address. */
#define SSTOP   4               /* Process debugging or suspension. */
#define SZOMB   5               /* Awaiting collection by parent. */
  • Ο χρονοπρογραμματισμός των διεργασιών γίνεται με βάση πολλαπλές ουρές αναμονής.
  • Κάθε ουρά έχει διαφορετική προτεραιότητα.
  • Η αλγόριθμος επιλέγει πάντα τη διεργασία που μπορεί να εκτελεστεί από την ουρά με την υψηλότερη προτεραιότητα.
  • Η διεργασίες που βρίσκονται στην ίδια ουρά εκτελούνται κυκλικά.
  • Διεργασίες μετακινούνται από ουρά σε ουρά έτσι ώστε να επωφελούνται οι διαλογικές διεργασίες.


kikiri-kou.blogspot.com

 
ΑΝ ΔΕΝ ΣΕ ΣΤΗΡΙΞΟΥΝ ΑΥΤΟΙ ΠΟΥ ΕΙΝΑΙ ΜΑΖΙ ΣΟΥ... ΘΑ ΑΠΟΤΥΧΕΙΣ...
Το kikiri-KOU είναι μια μή κερδοσκοπική σελίδα και παρέχει δωρεάν υπηρεσίες ψυχαγωγίας και επικοινωνίας στους επισκέπτες του. Τα έξοδα συντήρησης καλύπτονται από χορηγίες - δωρεές των επισκεπτών. Η οποιαδήποτε εισφορά έχει αποκλειστικά υποστηρικτικό και συμβολικό χαρακτήρα και δεν συνεπάγεται με κανέναν τρόπο απόκτηση ή διεκδίκηση ξεχωριστών προνομίων. Οι Εισφορές μπορούν να γίνονται μία ή περισσότερες φορές σε χρονικά διαστήματα. Το Online σύστημα που έχει επιλεγεί είναι το PAYPAL το οποίο θεωρείται το πιο ασφαλές και αξιόπιστο σύστημα online συναλλαγών παγκοσμίως.
All rights reserved by 

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

Related Posts Plugin for WordPress, Blogger...