Ohjelmiston lukitus on tietokoneongelma, joka voi ilmetä moniprosessorijärjestelmissä. Tämä lukitus voi aiheuttaa tietokoneen suorituskyvyn heikkenemisen dramaattisesti ja estää prosessorin lisäominaisuuksien käytön. Nykyaikaisissa moniprosessoritietokoneissa on käytettävä erityistä käyttöjärjestelmäohjelmistoa ohjelmiston lukituksen toimintahäiriön välttämiseksi.
Ohjelmiston lukituksen esiintymisen kuvasi ensimmäisen kerran IBM ™ -tutkija Stuart Madnick vuonna 1968. Tässä tietokonehistorian varhaisessa vaiheessa Madnick ennusti, että henkilökohtaiset tietokoneet tulevat pienemmiksi ja halvemmiksi seuraavien vuosikymmenten aikana, mutta ne rajoittuvat edelleen noin samat tiedonsiirtonopeudet. Tämä ennuste osoittautui enimmäkseen oikeaksi, ja tietokoneiden hyödyllistä tehoa lisätään usein lisäämällä vain lisää suorittimia.
Ohjelmiston lukituksen ensisijainen syy ei ole virhe itsessään, vaan ominaisuus. Tietokoneessa, jossa on useita prosessoreita, ei ole hyötyä siitä, että useat prosessorit käsittelevät samaa tietoa. Itse asiassa eri prosessorit, jotka yrittävät muokata yhtä tietolähdettä, voivat vioittaa alkuperäistä tietuetta. Jotta useat yksiköt eivät avaisi samoja tietoja, vain yksi prosessori saa käyttää, kun loput prosessointikomponentit ovat “lukittuja” tiedostosta.
Tämä lukitusmenetelmä on tehokas tietokoneissa, joissa on vähän suorittimia. Lähestymistavasta tulee kuitenkin ongelma laitteissa, joissa on laaja valikoima linkitettyjä käsittelyyksiköitä. Ohjelmiston lukitus rajoittaa vakavasti useiden prosessorien tietokoneisiin lisäämisen skaalautuvuutta ja tehokkuutta, koska tietojen jakamisnopeus tallennustilan ja prosessorien välillä on rajoitettu.
Mikään kone, mukaan lukien tietokone, ei ole täysin tehokas; tämä luontainen tehottomuus pahenee moniprosessoritietokoneissa. Esimerkiksi tietokoneella, jossa on kuusitoista prosessoria, saattaa olla yksi sen suorittimista aina käyttämättömänä, koska tietoja ei voida jakaa niin nopeasti kuin tarvitaan. Jossain vaiheessa tehoton tehostaminen tarkoittaa, että tietokoneen suorittimien lukumäärän lisääminen ei ole enää hyödyllistä. Tuhannen prosessorin lisääminen järjestelmään on hyödytöntä, koska tiedonsiirtonopeus on rajallinen ja suurin osa tarpeettomista suorittimista jää jumiin jatkuvaan ohjelmiston lukitukseen.
Ohjelmiston lukitus voidaan minimoida käyttämällä käyttöjärjestelmää, joka on erityisesti suunniteltu useille prosessoreille. Erikoisohjelmisto pystyy jakamaan tietolähteen useisiin eri osiin ja jakamaan nämä osat prosessoreille. Tämä lähestymistapa vähentää prosessorien lukitsemisen tarvetta, koska jokainen yksikkö voi käsitellä pienen osan alkuperäisestä datasta. Pohjimmiltaan moniprosessoriohjelmisto varmistaa, että jokaisella prosessointiyksiköllä on aina oma tehtävänsä, ja se pitää datan kulkevan hajautetummin ja tasaisemmin.